Java

毎回忘れる海外の全文検索SaaSサービスの名前「Algolia」と、ざっくり全文検索サービス紹介

GitLabの全文検索に使われていたり、Firebaseの全文検索に推奨されている、SaaSの全文検索サービスの名前を毎回忘れるのでメモ。 Algolia です。 2021/3/28現在では、公式ページの利用会社ロゴにSlackがあるなぁ。 使ってみたとかではなく、全文検索の話題の…

typescript-generatorにプリミティブ型を必須プロパティ(non null)にするオプションが追加されていた

以前書いた記事の段階では、 typescript-generator で requiredAnnotations を指定すると、プリミティブ型のフィールド/GetterについてもOptional Properties(null設定可能)扱いとなっていた。 2021年3月の更新で、プリミティブ型をまとめて必須(非null)にで…

typescript-generatorプラグインでJavadocからTSDocを生成する

以前調査したtypescript-generator、その後もパラメーター調整しながら使用しているが、困ったのがヒアドキュメント。 Java側ではJavadocでクラスやプロパティの説明を書いているが、生成したTypeScriptのインターフェース定義ファイルにはデフォルトだと出…

フィールドやメソッドに付与されたRetentionPolicy.CLASSのアノテーションをJavassistで実行時に判定する

lombok.NonNull やKotlinの val をコンパイルすると付与される org.jetbrains.annotations.NotNull など、 RetentionPolicy.CLASS のアノテーションを実行時に判定したい場面があった。 RetentionPolicy.CLASS の場合は、 RetentionPolicy.RUNTIME のように…

GradleでコンパイルするJavaのバージョンを指定するときはJavaVersion列挙型が使える

小ネタ。 GradleでJavaのコンパイルするバージョンなどを指定する際、お決まりで apply plugin: 'java' sourceCompatibility = 1.8 targetCompatibility = '1.8' のように記述するが、ここに列挙型が使える。 ただ、毎回クラス名が何だったか忘れるのでメモ…

Kotlinのchunkedのように、Javaでサイズ/要素数によるList分割をするにはGuavaかCommons Collectionsを使えばいい

Kotlinの Iterable#chunked が便利だな~と思っていた矢先、JavaでListを複数のリストに分割する機会があった。 検索すると独自の実装方法が上位に出てくるが、たぶんCommons CollectionsかGuavaに用意されてるだろうと思ったら、両方にあったのでメモ。 Kot…

GaugeのJava実装を試してみる

前回の続き。 Taikoを使ったJavaScriptによるテスト実装でもろもろ躓いたので、Javaによるテスト実装を試してみる。 環境 JDKのバージョンについて プロジェクトの作成 pom.xmlの修正 Java実装 WebDriver用のヘルパークラス 実行フック データの保存 ステッ…

WindowsでGradleのbootRunがCreateProcess error=206になるときの対応方法と、Kotlinで記述している場合の注意点

開発端末がmacOSだけのプロジェクトに、ひとりWindowsでアサインされた。 プロジェクト管理がGradle、フレームワークがSpring Boot、開発言語がJavaまたはKotlinだったので、さっそく gradlew.bat bootRun すると、 A problem occurred starting process 'co…

GradleでprocessResources時にシンボリックリンクを作成(Windows, macOS対応)

Spring Bootを使ったJavaプロジェクトで、 bootRun をしてから起動するまで数分かかっていた。 調べてみると、 processResources タスクで src/main/webapp/WEB-INF を build/build/resources/main/WEB-INF にコピーしていたが、 src/main/webapp/WEB-INF 配…

Javaでinstanceofの代わりに使えるClassクラスのメソッドはisInstanceとisAssignableFromだというメモ

タイトル通り。 使おうと思うたびに「 instanceof 演算子の代わりに使えるメソッドなんだっけ?」となるのでメモ。 環境 それぞれの使い方 instanceof 演算子 Class#isInstance(Object) Class#isAssignableFrom(Class) 注意点 振り返り 環境 OpenJDK 8 8.262.…

JavaクラスからTypeScriptのインターフェース定義を生成するtypescript-generator Maven/Gradleプラグインを試してみた

フロントエンドをTypeScriptで記述することとなり、リクエストやレスポンスで受け渡すデータもTypeScriptで型定義したいという要望がでてきた。 バックエンドはSpring Bootを使ったJavaアプリケーションで、ダブルメンテになると面倒。 JavaのクラスからType…

javax.jws.WebParamなどがコンパイルエラーになったらJava 11に更新されているかもしれない

周囲に突然Javaアプリケーションのコンパイルがエラーになる人がちらほら。原因はシンプルだったが、意図せず発生していたためメモ。 問題 Spring Bootを利用したアプリケーションが、macOSのPCでコンパイルできなくなる事例が発生。 Controllerのメソッド引…

JavaのStream APIで任意のCollectionに変換する

JavaのStream APIでtoListした結果を、独自のListにaddAllしていたソースがあったので、 Collectors#toCollection でできるよ、と教える機会があった。 Collectors#collectingAndThen に比べて知名度が低いようなのでメモ。 collectingAndThen これは検索す…

Java正規表現のフラグ指定と埋込みフラグ表現

バグ修正をしていたところ、 java.util.regex.Pattern の埋込みフラグ表現が原因だった。 Java正規表現のフラグ指定や埋込みフラグ表現について、周囲に知っている人がいなかったのでメモ。 フラグ指定 Pattern.compile(String regex, int flags) で、指定し…

StringUtils#split(String, String)の仕様を勘違いしてハマった

Apache Commons Langの StringUtils#split(String, String) の挙動で地味にハマったのでメモ。 環境 Java 1.8.0_211、Apache Commons Lang 3.9にて確認。 状況 StringUtils#split(String, String) の第2引数にCRLFを渡すと、CRでもLFでも分割される。 import…

Javaでユニットテストを書く時のメモ

IDEやエディタにスニペットとして登録している、テスト記述時のテンプレートがあるが、最近他人の端末でコーディングする機会が多く、「あれ、どう書くんだっけ?」となることが多かったのでメモ。 環境 Rule パラメーター化テスト MockitoのdoReturn/whenとw…

JavaのModelMapperでLombokの@Value+@Builderを付けたクラスに変換する

Javaのクラス変換にModelMapperを使っているが、LombokのBuilderアノテーションを付与したクラスに対し、 ModelMapper#map メソッドを実行するとエラーが発生したので、対応方法をメモ。 環境 エラー発生状況 対応 調整 環境 ModelMapper v2.3.2 で確認。 エ…