X(Twitter) Zenn GitHub RSS 共有

Java

作成日時:2024-08-01以前
更新日時:2024-08-26

列挙型とファクトリー

値オブジェクトによる普遍性
関心事を纏めておけば修正箇所はわかりやすい
修正するとき何処を直せばいいかすぐわかるような。

リフレクションはキャッシュする

Math.ceil(1/2)が1にならない

1/2が0に評価されるから。
どちらかをdoubleにキャストする。

Enum

Stream

マルチスレッド

基本的にはFuture#getとCallableでスレッドの完了を待てばいいが、
各スレッドが終わった直後に何かをしたければ、CompletableFutureで
JavaScriptのPromiseみたいなことができる。

モジュール

Javaのモジュールに関して。
モジュールは下記の認識。

Javaプロジェクト内に下記のパッケージが存在するとする。

module com.example {
exports com.example.a.util,org.example.b.util
}

として単一のjarを生成した場合、
末尾utilのパッケージのみが外部から参照される認識

みたいに考えればよろし

requiresで本当に必要なモジュールを明示できる
それ以前は関係ないものを読み込んだりする可能性があった

でもmavenやgradleがあればあんまり恩恵はない

インターフェイス

Optionalでnull合体演算子

Optional.ofNullable(obj).orElse(default)

Gradle

Springを使わずに構築するのが久々だから、そこそこ詰まった。
Eclipseから作成すると、デフォでマルチプロジェクトになるよう変わっていた。
シングルプロジェクトが作りたかったので、下記の手法でプロジェクトを作成した。

導入からプロジェクト作成

  1. Gradle Build Toolからzipをダウンロード
  2. zipを解凍し、任意の場所に配置
  3. binフォルダにpathを通す。
  4. gradle initでプロジェクト作成。対話形式。
    • タイプは4のBasicを選ぶ
  5. 出来たプロジェクトをeclipseにインポート

Gradleの同期が終わらない

15%前後から進まなくなった。
設定 > Gradleから「ビルド・スキャン」のチェックを外す。

可視性

ラムダ

forEachの中のラムダ式が検査例外出す奴だと、try-catchで囲まなければならないからめんどくさい。
これに限らず、いろいろとforの方がよい。
ラムダは単純なstream処理と、関数インターフェイスとかで使用すべき。

その他