Sitemap

JSpecifyについて

Apr 19, 2025

--

Photo by Scott Rodgerson on Unsplash

AndroidXのReleaseNoteで This library now uses JSpecify nullness annotations という記述があり、 JSpecify を知らなかったので簡単に調べてみました。

JSpecifyとは

基本的に以下を見てもらえると良いかなと。

Googleなどの複数の企業が参加していて、JVM言語で使用する共通のアノテーションを定義して相互運用の向上を目的にしています。今はNullに関するアノテーションが焦点を当てています。

上記のドキュメントにも記載されていますが、Nullに関するアノテーションはこちらのStackoverflowにある通りたくさんあります。これをなんとかしようとしてる感じですね。
org.jetbrains.annotations.NotNull だったり、 androidx.annotation.NonNull だったり、他にも色々ありますね。

使ってみる

以下のドキュメントにあります。

まず使うにはGradleで追加します。

implementation("org.jspecify:jspecify:1.0.0")

@NonNull と @Nullable

Nullにならない箇所では @NonNull をつけ、Nullの可能性がある箇所には@Nullable を使うだけです。おそらく知ってる人が多いのかなと。

import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;

public class Sample {
public @NonNull String hoge() {
return "hoge";
}

public @Nullable String foo() {
return null;
}
}

@NullMarked と @NullUnmarked

こちらは、classなどに付与して全体を定義する感じになります。

@NullMarked
public class Sample {
public String hoge() {
return "hoge";
}

public @Nullable String foo() {
return null;
}

@NullUnmarked
public static class Sample2 {
public String piyo() {
return null;
}
}
}

@NullMarked をつけるとそのスコープのものは基本NonNullとして扱うようになります。 @NullUnmarked をつけると @NullMarked の指定を解除する感じなります。

簡単にはこんな感じになります。他の細かいものはドキュメントを見てもらえれば。

AndroidXについて

今年くらいからAndroidXライブラリで JSpecify が使われるようになっているようです。こちらのIssueTrackerで確認できます。

基本的にAndroidアプリ開発者の人はKotlinを使ってる方が多いと思いますし、Kotlinは JSpecify のアノテーションを認識できるので、そこまで気にする必要はないかなと思います。

--

--

Kenji Abe
Kenji Abe

Written by Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO

No responses yet