2016-12-20 3 views
1

私のアプリではすべてのアクティビティの基本クラスがあります。変数activityClassのタイプを<? extends BaseActivity>にします。この私がKotlinで変数を宣言した方法です:Kotlin - 未使用のコードを誤って報告している可能性があります

var activityClass = MainActivity::class.java as Class<out BaseActivity> 

問題はAndroidのスタジオで、私は一部を取得することである「as Class<out BaseActivity>」グレーアウトし、ポップアップメッセージは言う:私場合

を「いいえキャストは必要ありません」 ASのアドバイスに従って、キャストを削除すると、BaseActivityから派生した他のアクティビティを使って変数を割り当てようとしているときにコンパイラエラーが発生します。次のコード:

activityClass = SpecificActivity::class.java 

は私にエラーを与える「型推論失敗した予想型の不一致:必要なClass<MainActivity>を、Class<SpecificActivity>を見つけました」。

これは、ASコミットウィザードの[クリーンアップ]および[インポートの最適化]オプションがチェックされているため、コード変更をコミットしているときに問題が発生し、「未使用」コード(「クラス」パート)実際に使用された事実。 私は実際にそれらを真に設定したいので、解決策はこれらのオプションをオフにすることではありません。

私が変更をコミットする場合は、キャストが使用されているクラスに移動して変更を元に戻すと、「コミットする前にインポートを最適化して元に戻しますか?」というメッセージが表示されます。私が確認すれば、私はキャスティングバックを取得するので、これは問題を引き起こしていることを知っている。

PS:私は、この問題を解決する正しい方法は、変数の型を指定することであるKotlin 1.0.5-3

答えて

3

を使用します。私の問題を解決し

var activityClass: Class<out BaseActivity> = MainActivity::class.java

+0

[OK]を、!実際に使用されている場合、lintが自分のコードを削除しようとする理由も知っていますか? – vanomart

+1

そのようなキャストは使用されません。推測される変数型に影響を与えるという事実は副作用です。 – yole

関連する問題