我试图通过将这两者定义为顶级乐趣和伴随对象静态乐趣来实现这一点,但是我得到了相同的结果。我可以看到生成的方法,但是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
注释使编译器通过省略结束参数来生成所有方法。它不会为参数的所有排列生成方法。
因此MyFragmentKt.newInstance(bird)
将存在,而MyFragmentKt.newInstance(mouse)
甚至MyFragmentKt.newInstance(bee)
将不存在。
关于android - 使用Kotlin的@JvmOverloads和Android的Fragment.newInstance()模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47190428/