【Android】javaからKotlinにコンバートした直後のエラー集
Kotlinに触ることになったので、コンバートで出くわしたエラー集をメモ代わりに記載。
随時追記していくので、増えたり訂正したりする可能性があります。
デバッグ実行時
2017/06/27 追記
デバッグ実行時にbreakで止めてる時に、ktコードだと変数ハイライトが見れない
(見れる方法はあるのだろうけど、そのままでは見れません)
watch変数なんかも名前入力しても見せてくれない。
staticなやつのアクセス
宴会の席にコンパニオンさんを呼んで、あげないといけないらしい。
class Hoge{ public static void A(){ } }
こんな感じのjavaのクラスがいたとして、そのクラス関数Aを呼ぶところが、コンバートしたらエラーになったりします。
java:
Hoge.A();
Kotlin: Hoge.Companion.A()
【クラス名】.Companion.【staticなやつ】とすればいいかも。変数なんかもこれ。
thisのアクセス
java例
class Hoge{ int a; public Hoge(int a){ this.a = a; //この部分 } }
これをkotlinで書くと、this@【クラス名】.アクセスしたいやつになるのでこんな感じ
this@Hoge.a = a
関数につけた変数でエラー
詳しい事はKotlinのドキュメントを呼んでもらうとして、
例のごとくjava例は下記。
public void ViewSetting(View view){} //この関数を呼ぶ
java:
View v = findViewById(何かID);
ViewSetting(v);
Kotlin: //Viewは取得済みと過程する コンバート時によしなになってるはずなので、ここでは言及しません ViewSetting(v!!)
javaでは[View v]と定義した変数をViewSetting関数の引数に渡したいところなのですが、
コンバート結果次第ではありますが、関数定義側がnullを許容する定義になっているかどうかが原因です。
つまり、アプローチとしては関数定義を修正するか、渡す変数側の書き方を修正するかの2通りになります。
関数定義を修正する場合は、
ViewSetting(view: View) とするか、
ViewSetting(view: View?) のように型の後ろに?をつけて、nullを許容するかどうか指示する。
変数側で対処するなら、v!!のように後ろに!!がついてるやつは「nullだったら例外」とするものらしいです。
詳しくはKotlinのリファレンスとかを読もう。
カスタムViewクラスの定義の仕方でエラー
例えば、カスタムViewを作ったとして、それをどこかのレイアウトXMLなんかに配置して使うとする。
その場合はレイアウトリソースから生成された時のコンストラクタを書いておかないとエラーになる。
その時々で必要なコンストラクタは、プライマリでもセカンダリのコンストラクタでもOK。
レイアウトリソースから呼ばれるコンストラクタの書き方の参考に。
//プライマリコンストラクタも定義しているクラス class HorizontalScrollRecycle(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : RecyclerView(context, attrs, defStyle){ //レイアウトリソースから生成された時のための、セカンダリコンストラクタ. プライマリコンストラクタにリレーしてる constructor(context: Context, attrs: AttributeSet): this(context, attrs, 0){ } init { //やりたい初期処理 var manager: LinearLayoutManager = LinearLayoutManager(context) manager.orientation = LinearLayoutManager.HORIZONTAL layoutManager = manager } }