2017-11-08 10 views
1

私はこれを、トップレベルの楽しみとコンパニオンオブジェクトの静的な楽しみの両方として定義することによってこれを達成しようとしましたが、同じ結果が得られます。私は生成されたメソッドを見ることができますが、何もありませんnewInstance(mouse: Mouse?)これはJavaからどのように呼び出されるのかについて私は誤解していますか?AndroidのFragment.newInstance()パターンでKotlinの@JvmOverloadsを使用する

// MyFragment.kt 
@JvmOverloads 
fun newInstance(bird: Bird? = null, bee: Bee? = null, cat: Int? = -1, mouse: Mouse? = null) : MyFragment { 
    //Put params in Bundle, put bundle in fragment... 
    return MyFragment() 
} 

// MyActivity.java 
MyFragment fragment = MyFragmentKt.newInstance(bird, bee, cat); // compiles 
MyFragment fragment = MyFragmentKt.newInstance(mouse); // does not compile 

答えて

2

@JvmOverloadsアノテーションは、コンパイラにend-parametersを指定せずにすべてのメソッドを生成させます。パラメータのすべての順列のためのメソッドを生成しません。

方法は、デフォルト値を有するのNパラメータとMを有する場合、M過負荷が生成される:最初のものは、N-1パラメータ(すべてが、かかる最後のかかりデフォルト値)、第2のパラメータはN-2のようになります。 MyFragmentKt.newInstance(mouse)あるいはMyFragmentKt.newInstance(bee)が存在しませんしながら、

のでMyFragmentKt.newInstance(bird)は、存在します。

+0

@tynnを参照してください。それから、私のオプションは 'newInstance(mouse:Mouse?)'を手動でオーバーロードすることです**または** MyFragmentKt.newInstance(null、null、null、mouse);で使用します – es0329

+0

私はそれが最良のオプションだと思います得た。 – tynn

関連する問題