1. ホーム
  2. android

[解決済み] プロパティは初期化されているか、抽象的である必要があります

2022-06-17 23:05:27

質問

私はKotlinの初心者なのですが、解決策を見つけることができませんでした。

どのようにクラスフィールドを宣言するのですか?javaで持っているようなものです。

protected SharedPreferences mSharedPreferences;

そして、その後にある onCreate() :

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

これで好きなところ(このベースとなるアクティビティのサブクラス内)で使えるようになりました。

Kotlinで同じことをやってみる。

protected var sharedPreferences : SharedPreferences

そして、その中に onCreate() :

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

しかし、警告が表示されます: "プロパティは初期化されているか、抽象的でなければなりません"。

どのように解決すればよいですか?

コンストラクタの外でプロパティを初期化したい場合は 後期初期化プロパティ はあなたが探しているものでしょう。プロパティの宣言は lateinit 修飾子でプロパティを宣言します。これにより、そうでなければ必要なイニシャライザーを省略することができ、意味のある値が割り当てられるまで、プロパティへのアクセスは例外で失敗するようになります。

protected lateinit var sharedPreferences: SharedPreferences