何の記事?
既存のAndroidアプリの一部にKotlinを導入しようとしたらコンパイルエラーが出てしまった問題について。
結論
retrolambdaとKotlinを併用するとコンパイルエラーが出る。
実際のコード
Kotlinで書かれたデータクラス
HogeClass.kt
package hoge.myapplication
data class HogeClass(var name: String = "俺だよ俺俺。") {
}
上記クラスを呼び出すJavaで書かれたMainActivity
MainActivity.java
package hoge.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import hoge.myapplication.Test.HogeClass;
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HogeClass hoge = new HogeClass();
tv = (TextView) findViewById(R.id.main_tv);
tv.setText(hoge.getName());
}
}
で、コンパイルすると
Error:(15, 9) エラー: シンボルを見つけられません
シンボル: クラス HogeClass
場所: クラス MainActivity
Error:(15, 30) エラー: シンボルを見つけられません
シンボル: クラス HogeClass
場所: クラス MainActivity
こんなエラーが出る。
どうやら、retrolambdaを使うとこのエラーが出るようだ。
retrolambdaをbuild.gradleのplug-inから削除したら治った。
併用する方法があるのかもしれないけど、
ラムダ式使うならKotlinで書けやってことなのかもしれない。
retrolambdaを使っている既存プロジェクトにKotlinを導入すると、
既存のラムダ式を全て改修する必要が出てくる可能性があるのでよく検討したほうがいいかも。