JAVA関連のことを調べてみた2021年01月22日

JAVA関連のことを調べてみた2021年01月22日

Java基礎 シリアライズとは

前回、ファイルオブジェクトを生成し文字を書き込んだり読み込んだりする処理を書きました。
今回は、プログラマーが作ったクラスで生成したオブジェクトを入出力する方法について書きたいと思います。

##シリアライズ
生成したインスタンスをバイト列に変換したり(**シリアライズ**)、またそのバイト列をインスタンスに戻したり(**デシリアライズ**)する仕組みです。
この仕組みによって、入出力ストリームを使用してファイルに保存したりネットワークで伝送したりできます。
シリアライズは直列化とも呼ばれます。

##オブジェクトをシリアライズ可能にする
通常のクラスをシリアライズ可能にするには、**java.io.Serializableインターフェース**を実装する必要があります。このインターフェースはマーカーインターフェースのため、オーバーライドすべきメソッドは持ちません。

下のプログラムは、PersonクラスがSerializableインターフェースを実装し、シリアライズ可能なオブジェクトにしています。

“`java:Person.java
import java.io.*;

clas

元記事を表示

Java の UUID は素晴らしい!

ユニークのキーを生成したいと思って、この記事を見つけました。

https://qiita.com/kawasima/items/6b0f47a60c9cb5ffb5c4

まさにこの記事の通りです。素晴らしい。

結論から言うと、UUID version4 が良さそうです。
UUID 以前から知ってましたが、バージョンまであるのは知りませんでした。

じゅあ、どうやってバージョンを調べるの?と調べたら、この記事

http://xawa99.blogspot.com/2013/07/UUID-Version.html

xxxxxxxx-xxxx-Vxxx-xxxx-xxxxxxxxxxxx
なるほど!

Java 8 で検証してみました。

“`java
import java.util.UUID;

public class App {
public static void main(String[] args) {
for (int i = 0; i < 10; i++

元記事を表示

【Spring】@SessionAttributesでセッションオブジェクトでオブジェクトを持ち回りたいのに・・・

###No primary or single public constructor found for interface java.util.List
このエラーに5時間位かかりましたね。意味わからんかったー
結局セッションオブジェクトの扱い方がわかっていなくて、コントローラーのメソッドの引数に@ModelAttributeなしで`List ListInt,`みたいに渡してて、これがアカン買ったようです。

###大まかなイメージ
1. セッションに置きたい名前を準備
2. その名前にオブジェクトを結びつける
3. model.addAttributeでセッションに保存する
4. メソッドの引数に@ModelAttributeをつけてセッションから取得

###実装する場所
####コントローラーの上に

“`java
@SessionAttributes( value=”〇〇”)
“`
`〇〇`にはオブジェクトの名前(属性名)

####コントローラーの中の一番上に@ModelAttributeでオブジェクトを準備

“`java

@ModelAtt

元記事を表示

KotlinでMapとListをfor文で操作しよう!

### Key:Valueが1:1のMapをListにする

“`Kotlin:
// 1:1
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
// mapのすべてのvalueが格納される
val valueList = ArrayList(map.values)
var list: MutableList
list = ArrayList()
list.addAll(valueList)
“`
### 1:1のMapを条件分岐でListに格納する

“`Kotlin:
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
val valueList = ArrayList(map.values)

// key1のvalueがarray変数に格納される(“val1”)
var araay = map.get(“key1”).toString(

元記事を表示

Java メモ

列挙で比較する時など

“`
Arrays.asList({A,B,C}).contains
“`
を使う

“`
Optional.isPresent()
“`
はなるべく使わず
“`
Optional.map ~ orElse orElseThrow“`
する

元記事を表示

初心者が1から始めるJava開発-Vol.3- クラス、メソッド編

今回はJavaの最も重要な概念であるクラス、メソッドについて説明していきます。

私もまだまだプログラマーとしては発展途上で、こういう概念の話は言語化がむずい。
分かりにくい概念の話が多いですが、実装を経て「あーそういう事か」と分かればOKです。

もちろん、Hands On形式で実際にコードも書いていきますよ!

———————————
**Javaの初心者向けおすすめ本**
~今さらながらJavaで関数型プログラミングを学習してみた~(第2部)

「関数型プログラミングとJava8での取り組みと追加API説明」を中心テーマとした第1部はすでに投稿されています。
 [第1部へのリンク](https://qiita.com/greencycle/items/d864a56da30b3861fb4b)

##はじめに##
第1部では関数型プログラミング自体の概説と、Java8で新たに取り入れられたAPI+そのサンプルを中心に紹介しました。
本第2部では「実際Javaシステム開発においてどの程度関数型プログラミングを取り込むべきなのか?」を中心テーマとして少し現実的なサンプルも交えて検討していきたいと思います。
あわせて関数型プログラミングの説明でよく用いられている「パイプライン、高階関数、カリー化」という用語についてもJavaベースでの説明を行っていきます。
なお、内容には主観にもとづく部分や、個人的指向が入ったプログラムスタイルになっている場合がありますので了承お願い致します。
関数プログラミング特有の語句については第1部の後尾部分に理解した範囲での簡単な説明を記述していますので参考にして下さい。

##関数型プログラミングにおける

元記事を表示

Java Silver SE11 継承とオーバーライドの間違えやすい部分

Java Silver SE11の問題を解いていて継承とオーバーライドに関する問題を間違えるので備忘録として残す。

大事なのは何の型で宣言されて、何のインスタンスを生成しているか。
メソッドはどのようなアクセス修飾子が付与されているか。

“`
public class Main {
public static void main(String[] args) throws Exception {
//case A
Super superClass = new Sub();

//case B
// Super superClass = new Super();

Sub subClass = new Sub();

//code 1
// subClass = superClass;

//code 2
// subClass = (Sub)superClass;

元記事を表示

DynamoDB Enhanced Client にて、なぜかインデックステーブルに対してアクセスしてしまう

# エラー内容
エラー文は以下の通り。

“`java
java.lang.IllegalArgumentException: A sort key value was supplied for an index that does not support one. Index: $PRIMARY_INDEX
“`
# 結論
属性に対するゲッター・セッターの定義がおかしい。(敗北N回目、、、)

# 対処
適切なゲッター・セッターを設定しましょう。
具体的には以下の2点をチェック。

– メソッド名
– 引数の型

# 発生状況
筆者の場合は以下のような形で発生しました。

“`java
@DynamoDbBean
@Setter
public class Foo {

private String name;
private String date;

@DynamoDbAttribute(“name”)
public String getName() {
return name;
}

@DynamoDbAttribute(“date”)

元記事を表示

Selenium DOM要素をホバー&クリックする方法

## Seleniumを使用してDOM要素をホバーしてからクリックする方法について明記します。

SeleniumはWebサイトやWebページの閲覧を自動化することができます。
今回は、抽出したDOM要素をホバーしてからクリックする方法について明記します。
要素をホバーすることでプログラム上、`マウスカーソルがDOM要素に重なっている状態`を表現します。

“`qiita:Java
import org.openqa.selenium.interactions.Actions;

public static void autoHoverClick(WebDriver driver, WebElement element){
Actions act = new Actions(driver);
act.moveToElement(element).perform(); // 指定したDOM要素をホバーする(hover)
element.click(); // DOM要素をクリック
}

“`

元記事を表示

たったこれだけ!チーム開発でコードフォーマット忘れを防ぐ方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122958/37d8e44e-07cb-355a-809b-25bf16a3b198.png)

# はじめに

**「コードフォーマットが適用されておりません。」**
こんな指摘をした人、された人。いるのではないでしょうか?
今回はコードフォーマットを**CIツール**で実行し、開発者はフォーマッターの実行をしないような仕組みを紹介します。

# この記事を書こうと思った動機

**お客様指定のコードスタイルのある規約があるプロダクト**において以下の問題に直面し、結果的に工数が増大したため。

:star: **ケース1. ローカルで「コードフォーマッター」が適用されずにPull Requestを出すケース**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122958/4e6534c9-9f34-1a71-6865-0ddd34e1b0

元記事を表示

Javaでディープラーニングを実装してみた

ディープラーニングをスクラッチから実装して理解するアプローチの書籍としては、『[ゼロから作るDeeplearning](https://www.oreilly.co.jp/books/9784873117584/)』が有名ですが、同じ趣旨の『[ディープラーニングの数学](https://www.nikkeibp.co.jp/atclpubmkt/book/19/273470/)』という書籍がとても分かりやすかったので、[Pythonのコード](https://github.com/makaishi2/math_dl_book_info)を[Javaで実装](https://github.com/kinmojr/math_deeplearning_java)してみました。

Javaは機械学習不毛地帯(というかデータサイエンス領域がPythonの独壇場?)ですが、Javaで機械学習のロジックを理解したいという奇特な方がいれば参考にしてください。

オリジナルと同様にできる限りライブラリを使わず、スクラッチで実装しました。
(実行速度の問題で行列やベクトルの演算部分はcommons mat

元記事を表示

SpringBootで日付の相関チェックをする

#概要
SpringBootで複数項目を比較してバリデーションを行う方法(相関チェック)をまとめる。

#コード
まず、ユーザから日付の入力を受け取るエンティティクラス。

“` java
package com.sample.Form;

import com.sample.Annotation.DayCheck;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.time.LocalDate;

@Data
@DayCheck //(1)
public class SearchLogForm {
@NotNull(message = “日付入れてね^^”) //(2)
private LocalDate startDate;

@NotNull(message = “日付入れてね^^”)
private LocalDate endDate;
}
“`

解説
(1)->このあと作成する自作のアノテーションをクラス全体に付与。
(2)->そもそも日付が入力され

元記事を表示

Java Powerpointにフッタを挿入

 

今日はJavaでPowerpointにフッタを挿入する方法を紹介します。Spire.Presentation for Javaというライブラリを使ってPowerpointにフッタを簡単に挿入することができます。

下準備

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

f:id:lendoris:20210120151857p:plain

Java  PowerPoint パスワード設定と解除

Spire.Presentation for Javaを使ってPowerPointのファイルにパスワード設定することができます。今回はPowerPointにパスワードを設定・解除する方法を紹介していきます。

下準備

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

f:id:lendoris:20210120151857p:plainフィボナッチ数列の初歩メモ

・フィボナッチ数列

**フィボナッチ数列**は、イタリアの数学者レオナルド・フィボナッチが考えた「[ウサギ算](https://talavax.com/usagizan.html)」から導かれる数列です。この数列は、自然界の現象に数多く出現し、ヒマワリの種の[配列](https://talavax.com/array.html)にも**フィボナッチ数列**の法則が働いているといわれている。

n番目のフィボナッチ数をFnで表すと、Fnは再帰的に

“`jsx
F0 = 0
F1 = 1

Fn+2 = Fn + Fn+1 (n≧0)
“`

で定義される。

1番目と2番目の値を足すと3番目の値になる。
言い方を変えると、ひとつ前とふたつ前の値を足した数が次の数となる。

・実際に書いたコード

“`java
public class TryJava0120 {

public static void main(String[] args) {

int f0, f1, fn;

f0 = 0;
System.out.println

Java基礎 ファイルの読み書き

## FileWriter、FileReaderを使ってファイルを読み書きする

まずファイル名を指定し、Fileオブジェクトを生成します。
それをもとにキャラクタストリームである「**FileWriter**」「**FileReader**」を使って、char単位で読み書きを行います。

ちなみにキャラクターストリームを使用すると、文字コードが自動的に変換されるので、ファイルが保存されているOSの文字コードを意識することなく入出力を行えます。

以下のコードは、「text.txt」というファイルを生成し書き込みを行ったのち、
そのファイルの中身を読み込んで出力しているというプログラムです。

“`Main.java
import java.io.*;

public class Main {
public static void main(String[] args) {
try (FileWriter text1 = new FileWriter(new File(“text.txt”));
FileReader text2 = new FileReader(new

Oracle Autonomous Database 21c へJDBC Thin接続してみてみた

Autonomous DatabaseではTransport Layer Security (TLSv1.2)を使用するセキュアな接続が要求されます。 JDBC Thinドライバを使用するJavaアプリケーションには、Oracle WalletまたはJava KeyStore (JKS)が必要です。
ということで、[JDBCコード・サンプル](https://github.com/oracle/oracle-db-examples/tree/master/java/jdbc/ConnectionSamples)から[DataSourceSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/DataSourceSample.java)と[UCPSample.java](https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/UCPSa

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager

意外と知られていない。SpringBoot のもう一つのPlatformTransactionManager
それは:org.springframework.data.transaction.ChainedTransactionManager です。

使用するイメージ

“`java
@Bean(name = “chainedTransactionManager”)
public ChainedTransactionManager transactionManager(@Qualifier(“primaryDs”) PlatformTransactionManager ds1,
@Qualifier(“secondaryDs”) PlatformTransactionManager ds2) {
return new ChainedTransactionManager(ds1, ds2);
}
“`

“`java
@Transact

MySQL workbenchでレコードを削除したらjavax.persistence.EntityNotFoundExceptionが発生

###環境
Spring Boot 2.4.0
java 1.8
thymeleaf 3.0.11
Spring Security 2.4.0
MySQL 8.0.22

###現象
MySQLWorkbenchで「いらんなぁ」って思ったレコードを消去しました。
`Delete row`でぽんと消しちゃったんですね。

そしたらシステムにログインできなくなりました。

別にしようとしてたログインとは関係ないレコードなんですけどね。

また元に戻せば大丈夫ですが、AutoIncrementがあるので、
1. AutoIncrementを外す
2. idを指定するinsertする
3. AutoIncrementをつける

ってめんどくさいことをしないと戻せない。

前にもやったんですけど、解決策がわからず前に進まなかったので、とりあえずめんどくさいけど上のやり方をしました。

でもまたあとから見て不要だと思ったので削除しようってやったら、「またかよ・・・」

これからもあるかもしれないので、ちょっと調べました。

###解決策
https://stackoverflow.com/que