Kotlin 1.4.x 互換性ガイド
「言語をモダンに保つ」と「快適なアップデート」は、Kotlin 言語設計における基本原則です。前者は言語の進化を妨げる構文は削除すべきであると述べており、後者はその削除を事前によく伝え、コードの移行を可能な限りスムーズにすべきであると述べています。
言語の変更の多くは、アップデートの変更ログやコンパイラの警告など他のチャネルですでに発表されていますが、このドキュメントではそれらをすべてまとめ、Kotlin 1.3 から Kotlin 1.4 への移行のための完全なリファレンスを提供します。
基本用語
このドキュメントでは、いくつかの種類の互換性を紹介します:
- ソース: ソース互換性のない変更は、以前は正常にコンパイルできていたコード(エラーや警告なし)がコンパイルできなくなる変更です。
- バイナリ: 2 つのバイナリアーティファクトを入れ替えても、ロードエラーやリンケージエラーが発生しない場合、それらはバイナリ互換であると言います。
- 振る舞い: 同じプログラムを適用したときに、変更前後で異なる動作を示す場合、その変更は振る舞いにおいて互換性がないと言います。
これらの定義は純粋な Kotlin に対してのみ与えられていることに注意してください。他の言語(Java など)の観点からの Kotlin コードの互換性は、このドキュメントの範囲外です。
言語および標準ライブラリ (stdlib)
in 中置演算子と ConcurrentHashMap における予期しない動作
課題: KT-18053
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 では、Java で記述された
java.util.Mapの実装クラスに由来する自動演算子containsを禁止します。非推奨サイクル:
- < 1.4: 呼び出し箇所で問題のある演算子に対して警告を導入
= 1.4: この警告をエラーに格上げ。
-XXLanguage:-ProhibitConcurrentHashMapContainsを使用して、一時的に 1.4 以前の動作に戻すことが可能
public インラインメンバー内での protected メンバーへのアクセスの禁止
課題: KT-21178
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 では、public なインラインメンバー内から protected メンバーへのアクセスを禁止します。
非推奨サイクル:
- < 1.4: 問題のあるケースについて呼び出し箇所で警告を導入
- 1.4: この警告をエラーに格上げ。
-XXLanguage:-ProhibitProtectedCallFromInlineを使用して、一時的に 1.4 以前の動作に戻すことが可能
暗黙のレシーバーを伴う呼び出しに対するコントラクト (Contracts)
課題: KT-28672
コンポーネント: 言語コア
互換性のない変更の種類: 振る舞い
概要: 1.4 では、暗黙のレシーバーを伴う呼び出しにおいて、コントラクトによるスマートキャストが利用可能になります。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-ContractsOnCallsWithImplicitReceiverを使用して、一時的に 1.4 以前の動作に戻すことが可能
浮動小数点数比較の不一致な動作
課題: KT-22723
コンポーネント: 言語コア
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、Kotlin コンパイラは浮動小数点数の比較に IEEE 754 標準を使用します。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-ProperIeee754Comparisonsを使用して、一時的に 1.4 以前の動作に戻すことが可能
ジェネリックなラムダの最後の式でスマートキャストが効かない
課題: KT-15020
コンポーネント: 言語コア
互換性のない変更の種類: 振る舞い
概要: 1.4 以降、ラムダの最後の式に対するスマートキャストが正しく適用されるようになります。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
結果を Unit に強制するためのラムダ引数の順序への依存の解消
課題: KT-36045
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、ラムダ引数は
Unitへの暗黙の強制なしに独立して解決されるようになります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
raw 型と整数リテラル型の間の誤った共通スーパータイプによる不健全なコード
課題: KT-35681
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、raw な
Comparable型と整数リテラル型の間の共通スーパータイプがより具体的になります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
複数の等しい型変数が異なる型でインスタンス化されることによる型安全性の問題
課題: KT-35679
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、Kotlin コンパイラは等しい型変数を異なる型でインスタンス化することを禁止します。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
交差型 (intersection types) の誤ったサブタイピングによる型安全性の問題
課題: KT-22474
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 では、交差型のサブタイピングがより正確に動作するように洗練されます。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
ラムダ内の空の when 式で型不一致が発生しない
課題: KT-17995
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、ラムダの最後の式として使用される空の
when式に対して型不一致が発生するようになります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
早期リターンがあり、戻り値の候補に整数リテラルが含まれるラムダで戻り型が Any と推論される
課題: KT-20226
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、早期リターンがある場合にラムダから返される整数型がより具体的になります。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
再帰的な型を持つスター投影の適切なキャプチャ
課題: KT-33012
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、再帰的な型のキャプチャがより正確に機能するため、より多くの候補が適用可能になります。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
非適切な型 (non-proper type) と柔軟な型 (flexible type) の共通スーパータイプ計算が誤った結果を招く
課題: KT-37054
コンポーネント: 言語コア
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、柔軟な型の間の共通スーパータイプがより具体的になり、実行時エラーから保護されます。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
null 許容型の型引数に対するキャプチャ変換の欠如による型安全性の問題
課題: KT-35487
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、キャプチャされた型と null 許容型の間のサブタイピングがより正確になり、実行時エラーから保護されます。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
非検査キャスト後の共変型に対する交差型の保持
課題: KT-37280
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、共変型の非検査キャストは、非検査キャストの型ではなく、スマートキャスト用の交差型を生成します。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
this 式の使用によるビルダー推論からの型変数の漏洩
課題: KT-32126
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、他に適切な制約がない場合、
sequence {}のようなビルダー関数内でのthisの使用は禁止されます。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
null 許容型の型引数を持つ反変型に対する誤ったオーバーロード解決
課題: KT-31670
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、反変の型引数を取る関数の 2 つのオーバーロードが型の null 許容性のみで異なる場合(
In<T>とIn<T?>など)、null 許容型の方がより具体的であると見なされます。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
ネストされていない再帰的制約を伴うビルダー推論
課題: KT-34975
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、渡されたラムダ内の再帰的制約に依存する型を持つ
sequence {}などのビルダー関数は、コンパイラエラーを引き起こします。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
型変数の早すぎる固定による矛盾した制約システム
課題: KT-25175
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、特定のケースにおける型推論がそれほど早く固定されなくなり、矛盾しない制約システムを見つけられるようになります。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-NewInferenceを使用して、一時的に 1.4 以前の動作に戻すことが可能。このフラグはいくつかの新しい言語機能も無効にすることに注意してください。
open 関数に対する tailrec 修飾子の禁止
課題: KT-18541
コンポーネント: 言語コア
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、関数に
openとtailrec修飾子を同時に付けることはできなくなります。非推奨サイクル:
- < 1.4:
openとtailrec修飾子が共存する関数に対して警告を報告(progressive モードではエラー)。= 1.4: この警告をエラーに格上げ。
コンパニオンオブジェクトの INSTANCE フィールドがコンパニオンオブジェクトクラス自体よりも可視性が高い
課題: KT-11567
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、コンパニオンオブジェクトが private である場合、その
INSTANCEフィールドも private になります。非推奨サイクル:
- < 1.4: コンパイラは非推奨フラグ付きでオブジェクトの
INSTANCEを生成= 1.4: コンパニオンオブジェクトの
INSTANCEフィールドが適切な可視性を持つようになる
return の前に挿入された外部 finally ブロックが、finally のない内部 try ブロックの catch 範囲から除外されない
課題: KT-31923
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、ネストされた
try/catchブロックに対して catch 範囲が適切に計算されるようになります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-ProperFinallyを使用して、一時的に 1.4 以前の動作に戻すことが可能
共変およびジェネリック特化されたオーバーライドの戻り値の型として、インラインクラスのボックス化されたバージョンを使用する
課題: KT-30419
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、共変およびジェネリック特化されたオーバーライドを使用する関数は、インラインクラスのボックス化された値を返します。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
Kotlin インターフェースへの委譲を使用する際に、JVM バイトコードでチェック済み例外を宣言しない
課題: KT-35834
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要: Kotlin 1.4 は、Kotlin インターフェースへのインターフェース委譲中にチェック済み例外を生成しません。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-DoNotGenerateThrowsForDelegatedKotlinMembersを使用して、一時的に 1.4 以前の動作に戻すことが可能
引数が別の配列にラップされるのを避けるため、単一の可変長引数パラメーターを持つメソッドへのシグネチャポリモーフィックな呼び出しの動作を変更
課題: KT-35469
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要: Kotlin 1.4 は、シグネチャポリモーフィックな呼び出しにおいて引数を別の配列にラップしません。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
KClass がジェネリックパラメーターとして使用される際のアノテーション内の誤ったジェネリックシグネチャ
課題: KT-35207
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要: Kotlin 1.4 は、KClass がジェネリックパラメーターとして使用される際のアノテーションにおける誤った型マッピングを修正します。
非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
シグネチャポリモーフィックな呼び出しでのスプレッド演算子の禁止
課題: KT-35226
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要: Kotlin 1.4 では、シグネチャポリモーフィックな呼び出しでのスプレッド演算子 (*) の使用を禁止します。
非推奨サイクル:
- < 1.4: シグネチャポリモーフィックな呼び出しでのスプレッド演算子の使用に対して警告を報告
= 1.5: この警告をエラーに格上げ。
-XXLanguage:-ProhibitSpreadOnSignaturePolymorphicCallを使用して、一時的に 1.4 以前の動作に戻すことが可能
末尾再帰最適化された関数のデフォルト値の初期化順序の変更
課題: KT-31540
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、末尾再帰関数の初期化順序は通常の関数と同じになります。
非推奨サイクル:
- < 1.4: 問題のある関数について宣言箇所で警告を報告
= 1.4: 動作が変更。
-XXLanguage:-ProperComputationOrderOfTailrecDefaultParametersを使用して、一時的に 1.4 以前の動作に戻すことが可能
非 const val に対して ConstantValue 属性を生成しない
課題: KT-16615
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、コンパイラは非
constなvalに対してConstantValue属性を生成しません。非推奨サイクル:
- < 1.4: IntelliJ IDEA のインスペクションを通じて警告を報告
= 1.4: 動作が変更。
-XXLanguage:-NoConstantValueAttributeForNonConstValsを使用して、一時的に 1.4 以前の動作に戻すことが可能
open メソッド上の @JvmOverloads に対して生成されるオーバーロードを final にする
課題: KT-33240
コンポーネント: Kotlin/JVM
互換性のない変更の種類: ソース
概要:
@JvmOverloadsを持つ関数に対して生成されるオーバーロードはfinalとして生成されます。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更。
-XXLanguage:-GenerateJvmOverloadsAsFinalを使用して、一時的に 1.4 以前の動作に戻すことが可能
kotlin.Result を返すラムダが、アンボックス化された値ではなくボックス化された値を返すようになる
課題: KT-39198
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、
kotlin.Result型の値を返すラムダは、アンボックス化された値ではなくボックス化された値を返します。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
Null チェックからの例外の統一
課題: KT-22275
コンポーネント: Kotlin/JVM
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、すべての実行時 Null チェックは
java.lang.NullPointerExceptionをスローするようになります。非推奨サイクル:
- < 1.4: 実行時 Null チェックは、
KotlinNullPointerException、IllegalStateException、IllegalArgumentException、TypeCastExceptionなど、異なる例外をスローしていました。= 1.4: すべての実行時 Null チェックが
java.lang.NullPointerExceptionをスローするようになります。-Xno-unified-null-checksを使用して、一時的に 1.4 以前の動作に戻すことが可能
配列/リスト操作(contains, indexOf, lastIndexOf)における浮動小数点値の比較:IEEE 754 または全順序 (total order)
課題: KT-28753
コンポーネント: kotlin-stdlib (JVM)
互換性のない変更の種類: 振る舞い
概要:
Double/FloatArray.asList()から返されるList実装は、contains、indexOf、lastIndexOfを実装し、全順序による等価性を使用するようになります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
コレクションの min および max 関数の戻り値を段階的に null 非許容に変更
課題: KT-38854
コンポーネント: kotlin-stdlib (JVM)
互換性のない変更の種類: ソース
概要: コレクションの
minおよびmax関数の戻り値の型は、1.6 で null 非許容に変更されます。非推奨サイクル:
- 1.4: 同義語として
...OrNull関数を導入し、影響を受ける API を非推奨化(詳細は課題を参照)- 1.5.x: 影響を受ける API の非推奨レベルをエラーに格上げ
= 1.6: 影響を受ける API を null 非許容の戻り値型で再導入
appendln を非推奨とし、appendLine を推奨
課題: KT-38754
コンポーネント: kotlin-stdlib (JVM)
互換性のない変更の種類: ソース
概要:
StringBuilder.appendln()はStringBuilder.appendLine()を推奨するために非推奨になります。非推奨サイクル:
- 1.4:
appendlnの代替としてappendLine関数を導入し、appendlnを非推奨化= 1.5: 非推奨レベルをエラーに格上げ
浮動小数点型から Short および Byte への変換の非推奨化
課題: KT-30360
コンポーネント: kotlin-stdlib (JVM)
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、浮動小数点型から
ShortおよびByteへの変換は非推奨になります。非推奨サイクル:
- 1.4:
Double.toShort()/toByte()およびFloat.toShort()/toByte()を非推奨とし、代替案を提案= 1.5: 非推奨レベルをエラーに格上げ
無効な startIndex に対して Regex.findAll でフェイルファストする
課題: KT-28356
コンポーネント: kotlin-stdlib
互換性のない変更の種類: 振る舞い
概要: Kotlin 1.4 以降、
findAllはfindAllに入る時点でstartIndexが入力文字シーケンスの有効な位置インデックスの範囲内にあることをチェックし、そうでない場合はIndexOutOfBoundsExceptionをスローするように改善されます。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
非推奨の kotlin.coroutines.experimental の削除
課題: KT-36083
コンポーネント: kotlin-stdlib
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、非推奨の
kotlin.coroutines.experimentalAPI が stdlib から削除されます。非推奨サイクル:
- < 1.4:
kotlin.coroutines.experimentalはERRORレベルで非推奨= 1.4:
kotlin.coroutines.experimentalが stdlib から削除。JVM では、別途互換性アーティファクトが提供されます(詳細は課題を参照)。
非推奨の mod 演算子の削除
課題: KT-26654
コンポーネント: kotlin-stdlib
互換性のない変更の種類: ソース
概要: Kotlin 1.4 以降、数値型に対する
mod演算子が stdlib から削除されます。非推奨サイクル:
- < 1.4:
modはERRORレベルで非推奨= 1.4:
modが stdlib から削除
Throwable.addSuppressed メンバーを隠し、代わりに追加された拡張関数を優先する
課題: KT-38777
コンポーネント: kotlin-stdlib
互換性のない変更の種類: 振る舞い
概要:
Throwable.addSuppressed()メンバー関数よりもThrowable.addSuppressed()拡張関数が優先されるようになります。非推奨サイクル:
- < 1.4: 旧来の動作(詳細は課題を参照)
= 1.4: 動作が変更
capitalize が二重音字 (digraphs) をタイトルケースに変換するように変更
課題: KT-38817
コンポーネント: kotlin-stdlib
互換性のない変更の種類: 振る舞い
概要:
String.capitalize()関数は、セルビア・クロアチア語ガイ・ラテン・アルファベット の二重音字をタイトルケース(DŽではなくDž)で大文字化するようになります。非推奨サイクル:
- < 1.4: 二重音字は大文字(
DŽ)で大文字化される= 1.4: 二重音字はタイトルケース(
Dž)で大文字化される
ツール
Windows では区切り文字を含むコンパイラ引数をダブルクォートで囲む必要がある
課題: KT-41309
コンポーネント: CLI
互換性のない変更の種類: 振る舞い
概要: Windows では、区切り文字(空白、
=、;、,)を含むkotlinc.batの引数にダブルクォート(")が必要になりました。非推奨サイクル:
- < 1.4: すべてのコンパイラ引数はクォートなしで渡される
= 1.4: 区切り文字(空白、
=、;、,)を含むコンパイラ引数にはダブルクォート(")が必要
KAPT:プロパティの合成 $annotations() メソッドの名前が変更された
課題: KT-36926
コンポーネント: KAPT
互換性のない変更の種類: 振る舞い
概要: KAPT によってプロパティに対して生成される合成
$annotations()メソッドの名前が 1.4 で変更されました。非推奨サイクル:
- < 1.4: プロパティの合成
$annotations()メソッドの名前はテンプレート<propertyName>@annotations()に従う= 1.4: プロパティの合成
$annotations()メソッドの名前にgetプレフィックスが含まれるようになる:get<PropertyName>@annotations()
