如何使用方法引用来引用超类方法?
在Java 8中,您可以SubClass.super::method
。
Kotlin的语法是什么?
期待您的回复!
的结论
感谢Bernard Rocha!
语法为SubClass::method
。
但要小心。在我的例子中,子类是一个泛型类。不要忘记将其声明为:
MySubMap<K, V>::method
。
修改
它仍然无法在Kotlin中使用。
她是Java 8中对超类方法的方法引用的一个例子:
public abstract class SuperClass {
void method() {
System.out.println("superclass method()");
}
}
public class SubClass extends SuperClass {
@Override
void method() {
Runnable superMethodL = () -> super.method();
Runnable superMethodMR = SubClass.super::method;
}
}
我仍然无法在Kotlin做同样的事情......
修改
这是我在Kotlin中尝试实现它的一个例子:
open class Bar {
open fun getString(): String = "Hello"
}
class Foo : Bar() {
fun testFunction(action: () -> String): String = action()
override fun getString(): String {
//this will throw an StackOverflow error, since it will continuously call 'Foo.getString()'
return testFunction(this::getString)
}
}
我希望有类似的东西:
...
override fun getString(): String {
//this should call 'Bar.getString' only once. No StackOverflow error should happen.
return testFunction(super::getString)
}
...
结论
在Kotlin还没有这样做。
我提交了一份专题报道。可在此处找到:KT-21103 Method Reference to Super Class Method
答案 0 :(得分:3)
正如documentation says所使用的那样,如java:
如果我们需要使用类的成员或扩展函数,它 需要合格。例如String :: toCharArray为我们提供了扩展 类型为String的函数:String。() - &gt; CharArray。
修改强>
我认为你可以达到你想做的事情:
open class SuperClass {
companion object {
fun getMyString(): String {
return "Hello"
}
}
}
class SubClass : SuperClass() {
fun getMyAwesomeString(): String {
val reference = SuperClass.Companion
return testFunction(reference::getMyString)
}
private fun testFunction(s: KFunction0<String>): String {
return s.invoke()
}
}
答案 1 :(得分:1)
根据贝尔纳多的回答,你可能会有这样的事情。它没有显着的变化。
fun methodInActivity() {
runOnUiThread(this::config)
}
fun config(){
}
此外,在传入的1.2版本中,您只能使用
::config
答案 2 :(得分:0)
不知道是否可以获得对超类功能的引用,但这里有一个替代你想要实现的目标:
override fun getString(): String = testFunction { super.getString() }