プラットフォーム型
Java由来のNull許容性を学びます
「プラットフォーム型」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
KotlinとJavaの関係
KotlinはJVM上で動作し、Javaコードを常に呼び出します。しかし、Javaにはnull許容型とnull非許容型という概念がありません。
では、KotlinはJavaから渡される値をどのように扱うのでしょうか。それを可能にするのがプラットフォーム型です。
プラットフォーム型とは
プラットフォーム型とは、null許容性が不明な状態でKotlinがJavaから受け取る型です。
Kotlinはエラーメッセージ内でこれを String! と表します。感嘆符は、nullかもしれないしnullではないかもしれず、Kotlinはどちらかを強制しないという意味です。
緩和されたチェック
プラットフォーム型に対して、Kotlinはnullチェックを緩和します。コンパイルエラーなしで、値をnull非許容として扱えます。
その代わり、実際にnullだった場合は実行時にNullPointerExceptionが発生します。
型は自分で選ぶ
プラットフォーム型の値を格納するときは、どのような型として扱うかを自分で決めます。
- null非許容の
Stringとして → 便利ですが危険です - null許容の
String?として → 安全で明示的です
このKotlinの例では、その選択をシミュレートしています。
fun fromJava(): String? = "value from Java"
fun main() {
val safe: String? = fromJava()
println(safe?.length)
}危険な選択
null非許容だと仮定しているときに、元の値がnullを返すと、代入時または最初の使用時にクラッシュします。
これがプラットフォーム型に潜む危険です。
fun fromJava(): String? = null
fun main() {
try {
val risky: String = fromJava()!!
println(risky.length)
} catch (e: NullPointerException) {
println("Null came from the Java side")
}
}アノテーションによる支援
Javaライブラリでは、@Nullable や @NotNull のようなアノテーションを使用できます。
これらが付いている場合、Kotlinはその情報を尊重し、プラットフォーム型ではなく適切な String? または String を提供します。
ベストプラクティス: null許容として扱う
アノテーションのないJavaコードを呼び出すときは、結果をnull許容として扱うのが安全な習慣です。
変数の型に ? を付け、Kotlinの他のnull許容値と同じようにセーフコールを使ってください。
fun fromJava(): String? = "data"
fun main() {
val value: String? = fromJava()
val length = value?.length ?: 0
println(length)
}境界で防御する
Javaとの境界は信頼できないものとして扱ってください。値がKotlinコードに入る箇所で、検証するかデフォルト値を設定します。
その後は、コードの残りの部分で安全なKotlinの型を扱えるようになります。
fun fromJava(): String? = null
fun main() {
val name = fromJava() ?: "default"
// from here on, name is a clean non-null String
println(name.uppercase())
}Kotlinがこれを許す理由
KotlinはJavaからのすべての値をnull許容にすることもできますが、そうするとJavaとの相互運用が非常に冗長になります。
プラットフォーム型は、利便性と厳密さを選べることを両立した、現実的な妥協案です。
プラットフォーム型の見分け方
自分で String! と書くことはありません。Javaから取得した値にマウスカーソルを合わせたとき、IDEのヒントやエラーメッセージにだけ表示されます。
! が表示されたら、null許容性を意識的に決める合図です。
まとめて確認
プラットフォーム型はJavaとKotlinの橋渡しをします。
- null許容性が不明で、
Type!と表示されます - Kotlinではnull許容型かnull非許容型かを選べます
- 安全を保つため、分からない場合はnull許容として扱います
- アノテーションによって推測が不要になります
fun fromJava(): String? = "safe value"
fun main() {
val value: String? = fromJava()
println(value?.uppercase() ?: "missing")
}理解度チェック
プラットフォーム型の理解度を確認しましょう。
まとめ
Javaとの境界を越えてnull許容性がどのように扱われるかを学びました。
- プラットフォーム型はnull許容性が不明です
- Kotlinはチェックを緩和しますが、誤った前提は実行時NPEの原因になります
- 境界ではnull許容として扱い、デフォルト値を設定します
- Javaのアノテーションによって適切な型が復元されます
これでNull Safetyの詳細解説は完了です。
よくある質問
「プラットフォーム型」レッスンは無料ですか?
はい。「プラットフォーム型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「プラットフォーム型」で何を学びますか?
Java由来のNull許容性を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「プラットフォーム型」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Nullable型とNon-Null型
- 安全呼び出しとElvis
- !!演算子
- プラットフォーム型