メインカテゴリーを選択しなおす
【Java】StreamやOptionalにおけるfilter()でのメソッド参照で、スマートに否定の条件式を指定する
※ 2019/12/23追記 コードの表記が崩れているご指摘を頂き、該当箇所を修正致しました。 ありがとうございます。 備忘録がてらメモ。 概ね実現したいのはタイトルの通り。 Java8から登場したStreamAPIの[Stream.filter()]は、条件に一致する要素だけをフィルタリングしてくれるとても便利なメソッドだ。 例: Demo1.java package test; import java.util.Arrays; public class Demo1 { public static void main(String[] args) { Arrays.asList("hoge"…
またしょーもない所で詰まったので備忘録がてらにメモ。 以下のプログラムで[hoge]内の[fuga]には何が代入されているかという問題。 例: Sample1.java package test; import java.util.Optional; public class Sample1 { public static void main(String[] args) { Hoge hoge = new Hoge(); Optional.of(hoge).orElse(hoge.withFuga("bar")); System.out.print(hoge.getFuga()); } pu…
【Java】Auto-UnboxingでのNullPointerExceptionにご注意を
Nullに対してAuto-Unboxingが働くと、NullPointerExceptionが発生する。 なのでラッパークラスとプリミティブで比較を行う場合は、思いがけない場所で落とし穴にハマってしまう。 例:Demo1.java public class Demo1 { public static void main(String[] args) { long hoge = 128L; Long fuga = null; System.out.println(hoge == fuga); // NulPointerExceptionが発生する } } 少しでもnullが入る可能性があるのであ…
Javaでのお話。 個人的に知らなかった、文字列の結合の仕様についてメモ。 ずっと以下のコードはNullPointerExceptionになると思い込んでいたのだが、どうやら違う様子。 例: Demo.java public class Demo { public static void main(String[] args) { System.out.println("hoge:" + null); // hoge:nullが出力される } } きちんとnullという文字列として出力される。 なんだかこの挙動はJavaScriptのundefinedに似ているなぁ……なんて。
【Java】[Generics]はしっかり設定して[RawType]を防ごう
[Generics]はしっかり設定して[RawType]を防ごう(大事なことなので2回ry) 以下のプログラムはコンパイルエラーになる。 注: Java8にて確認。 例: Hoge.java import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.stream.Stream; public class Hoge { public static void main(String[] args) { Map map = new HashMap(); Stream.of(map) .…
【Java】[java.util.Optional]における匿名クラスの扱いに気をつけよう
Javaの話。 ※ Java8及びJava15にて事象を確認。 以下のプログラム(Test1.java)はコンパイルエラーが発生する。 例: Test1.java import java.util.Optional; public class Test1 { public static void main(String... args) { Object object = Optional.of(new Object(){}) .orElse(new Object()); } } 例: Test1.javaのコンパイルエラー # javac Test.java Test.java:6: err…
【Java】JacksonでのInfinityの扱いについて
自分の備忘録がてら。 前回、JavaScriptのInfinityのJSONでの扱いについて書いた。 plugout.hateblo.jp 今回はJavaのJackson(com.fasterxml.jackson)だとどうなるのかなと思って試したのを残しておく。 github.com ちなみにInfinityはdoubleやfloatで0除算を行った場合に、その結果として取得される。 よく勘違いされるがJavaで0除算を行うと[java.lang.ArithmeticException]が発生されるというのは正確ではなく、intやlong等では発生するがdoubleやfloatでは発生しない…
【Java】[java.sql.ResultSet]の落とし穴
実装的に当たり前といえば当たり前だけれど、知らないとハマりそうな話。 [java.sql.ResultSet]の[ResultSet.getLong()]や[ResultSet.getInt()]は、primitiveな値を返却するように実装されている。 なのでDB上でNULL許可されているようなカラムから情報を取得する場合、もしNULLを期待するような処理を書こうと思っても0Lや0などのprimitiveの初期値になってしまう。 なので、NULLを期待したい場合には以下のように考慮してプログラムを書く必要がある。 例: Demo.java import java.sql.ResultSet;…
Lombokを拡張する方法を探していたのだが、想定していたよりも情報量が少なかったので備忘録がてらここへ記録。 projectlombok.org 結果として、日本語、英語、中国語の技術記事をかき集めることになった。 カスタマイズはjavacのtools.jarを扱うことになるので、ハードルは割と高め。 (javacパッケージの圧倒的なドキュメント不足に苦しむことになるので、基本的には実装済みのコードを漁ることになるはず) ちなみにLombokのv1.18.16(2021/01/11時点での最新版)のビルドにはJava11以降が必要。 一応、以下の手順で一応カスタマイズ自体とJARのビルドが可…
【Java】アクセス修飾子の問題でアクセスできないEnumをリフレクションで取得する
個人的メモ。 あるライブラリを弄っていて、アクセス修飾子がついていないEnumのインスタンスを引数に要求するメソッドに出くわしたのでこの方法を使った。 (そのメソッド自体はpublicなので、恐らくアクセス修飾子の考慮漏れか修正ミスだとは思う) 例: DemoType.java package secret; enum DemoType { HOGE, FUGA, FOO, BAR } この[DemoType]には修飾子がついていないので、このenumが属している[secret]というパッケージに属しているプログラムからしか参照できない。 (普通に使おうとしてもコンパイルエラーとなる) どうし…
【Java】Lambda式で「ambiguous(あいまい)」になるケースについて
ちょっとハマったのでメモ。 java.util.Functionやjava.util.ConsumerなどのFunctionalInterfaceなクラスのインスタンスを引数に取るメソッドに対して、Lambda式を与えると「ambiguous(あいまい)」としてコンパイルエラーになるケースが存在する。 例えば以下のクラスはコンパイルエラーになる。 例: Demo1.java import java.util.function.Consumer; import java.util.function.Function; public class Demo { public static void …
【Java】[java.math.BigInteger]について
備忘録がてら。 Javaの[java.math.BigInteger]はlongでも扱えない様な大きな範囲の数値を扱うことができるクラス。 例えばコンストラクタに数値が格納された文字列を渡し、計算させることもできる。 Longの最大値を文字列に変換して与え、1足してみるサンプルは次の通り。 例: Demo1.java import java.math.BigInteger; public class Demo1 { public static void main(String... args) { BigInteger bigInteger = new BigInteger(Long.toSt…
備忘録がてらメモ。 コンパイルしたJavaのバージョンを知りたい場合は、以下のようにするとスマート。 例: javap -v Demo.class grep "major version" awk '{ print $3 - 44 }' ※ Demo.classは対象のclassファイル
[Java] macにOracle JDKをインストールする方法
こんにちは、素人エンジニアです。この記事では、Java16を例にmacにOracle JDKをインストールする手順を紹介します。Javaを使うエンジニアは、新しい開発環境やテスト環境を整えるたびにJDKをインストールすることになると思います
BigDecimalで比較を行う場合の注意点【”0″と”0.0″は別?】
現在参画しているプロジェクトでBigDecimalでの値比較であるequalsとcompareToの仕様の違いで不具合が発生していました。備忘録としてここにまとめます。まずは以下のプログラムを実行してみてください。import java.m
JavaのモックフレームワークMockitoの導入方法と使い方
ちゃんとしたユニットテストをやろうとすると、クラスやメソッドのモック化は避けられません。Javaでよく使われるモックフレームワークにMockitoがありますが、モックやスタブの概念が理解できない導入方法がわからないどういうふうに使うのかイメ
Spring Boot入門:Spring Securityの認証をテスト
Spring Boot入門:Controllerをユニットテストではアクセスに制限がない場合のControllerをユニットテストしました。続いてこの記事では、Spring Securityを使っての認証および認可をしているURLに対するテ
【マイクラクラッシュ】マインクラフト 久しぶりに起動したら、クラッシュして立ち上がらない(´;ω;`)【解決方法】
皆さん、こんばんは。今日はマイクラの話です。何が起こったかと言うと、久しぶりにマイクラでもやろうかなと思って、Ver1.16.5でMOD(Forge)入れた構成で起動しようとしたら、クラッシュするじゃないですか!あかん!こんなの初めてだ!どうしよう????正直な話、マイクラのMOD導入なんぞはすべて誰かのモノマネでやってるので、仕組みがさっぱり分からない・・・・(´;ω;`)直ぐに調べました、何処へ行っても同様な症状が載っ...
難易度順にプログラミング言語の選び方をまとめたのでプログラミング言語選びの参考にしてみてください。JavaScript、Pythonは初心者がプログラミング言語を選択する上で入りやすい言語です。
[Java] macでJDKのバージョンを切り替える方法 ~ JAVA_HOMEを設定する
こんにちは、素人エンジニアです。この記事では、macでOracle JDKのバージョンを切り替える方法を紹介します。開発プロジェクトごとに使用するJavaのバージョンが異なるときは、これから紹介する方法でJDKを切り替えましょう。JDKのバ
IntelliJで「11は無効なソース・リリースです」というエラー発生!原因はJavaのバージョン指定の間違いです
IntelliJにて、Java11を使ったプロジェクトをビルドして実行しようとしたら、謎のエラーが発生しました。Javaのバージョン指定が間違っていることは確かなのですが、意外と原因を見つけるのに手間取ったので情報を残しておきます。エラー:
【Spring Boot】Gradleプロジェクトを作成してHello Worldと表示するREST APIを実行する
Spring Bootの新規プロジェクトをGradleで作成して、Hello Worldと出力するREST APIを作成します。Springの公式ページにクイックスタートガイドがあったのですが、Mavenプロジェクトでした。そこで、Grad