在Android的Fragment.newInstance()模式中使用Kotlin的@JvmOverloads

我试图通过定义为最高级别的乐趣和作为伴侣对象静态乐趣,但我得到相同的结果。 我能够看到生成的方法,但没有为newInstance(mouse: Mouse?)我误解了如何从Java调用这是什么?

 // 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 

@JvmOverloads注释使得编译器通过省略结束参数来生成所有的方法。 它不会为所有参数排列生成方法。

如果一个方法有N个参数,其中M有默认值,则会产生M个过载:第一个参数取N-1个参数(除最后一个取默认值外),第二参数取N-2个参数。上。

所以MyFragmentKt.newInstance(bird)将存在,而MyFragmentKt.newInstance(mouse) ,甚至MyFragmentKt.newInstance(bee)将不存在。