如何显式调用默认方法,没有反射和动态代理?
我正在阅读有关Java 8中的默认方法,而且我陷入了一件事 - 有没有一种方法可以从界面调用默认方法而不实现它,或者使用动态代理?只用一个简单的方法,就像下面的方法:如何显式调用默认方法,没有反射和动态代理?
interface DefaultTestInterface{
default void method1(){
//default method
}
}
class ImplementingClass implements DefaultTestInterface{
public void method1(){
//default method invocation in implementing method
DefaultTestInterface.super.method1();
}
void method2(){
//default method invocation in implementing class
DefaultTestInterface.super.method1();
}
}
public class Main {
public static void main(String[] args) {
//is there any way to simply invoke default method without using proxy and reflection?
}
}
我看过类似的问题,但first在实现方法只调用连接,另外两个与dynamic Proxy using reflection和 reflection连接。
这些解决方案相当复杂,我想知道是否有更简单的方法。我也阅读了这些文章,但是我没有找到解决我的问题的方法。我会很感激任何帮助。
如果接口只有一个方法,或者它的所有方法都默认实现,所有你需要做的就是创建一个匿名实现,它不实现您要呼叫的方法:
(new DefaultTestInterface() {}).method1();
谢谢,这正是我正在寻找的解决方案。 –
@MichałSzewczyk:你的问题明确地说“*不实施它*”,而这个答案*就是实施它。这根本没有任何意义。它归结为你真的问过“我如何实现一个接口?”...... – Holger
@Holger从技术上讲,你是绝对正确的:这*是接口的实现。然而,这种退化的实现看起来并不像一个实现 - 事实上,我确信包括我自己在内的许多程序员不会在粗略阅读中发现实现。 – dasblinkenlight
所以你想使用一个没有实例的实例方法??? – f*
你的问题存在一些困惑。 java 8接口的*默认方法*已经是一个实现。如果您没有需要不同实现的类特定行为,则只需实现该接口,然后省略要用作默认的方法。如果您想从* interface *中调用方法,而不是考虑使用* static *关键字来定义它,请改为。 –
没有@f*,我正在考虑以某种方式包含实例化的解决方案。 –