在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)
将不存在。