【发布时间】:2020-06-10 09:52:50
【问题描述】:
这与 Java 8 接口有关。我有一个只有默认方法的界面。我可以创建这个接口的匿名实例。
public interface Itest{
default String get(){
return "My name is ITest";
}
}
public class A{
Itest itest = new Itest(){};
}
我想创建一个提供接口的实用程序函数,返回匿名类。类似于以下内容
class MyUtil{
public static <T> T get(Class<T> interface){
// returns the anonymous class for the interface argument
// Something like return new interface(){};
}
}
public class A{
Itest itest = MyUtil.get(Itest.class);
}
如果可能的话,有人帮助我以及如何在 MyUtil.get() 函数中实现它?
用例:我很少有这样的接口(使用默认方法)。现在,如果在设置中这些接口没有可用的实现类,我想创建匿名类实例以便可以调用默认方法。当我只需要这些默认方法本身时,这将节省创建实现类的工作。
【问题讨论】:
-
您究竟为什么要这样做?你的最终目标是什么?为什么
MyUtil.get(...)会帮助您实现目标?因为你不能像你想做的那样从Class<?>实例化一个接口,即使你的接口只包含默认方法。您可能会通过使用Proxy而侥幸逃脱,但它很难。 -
感谢@OlivierGrégoire 的建议。关于用例:我将有许多带有默认方法的接口。对于每个接口,可以有多个基于平台的实现。但大多会使用默认方法。因此希望尽可能避免创建空的 impl 类。因此,希望创建一个 Util 方法,如果实现类可用,该方法可以创建一个 newInstance() 或返回一个匿名类。这个 Util 方法将帮助我在一个地方处理这些接口。希望这能回答问题。
标签: java generics interface anonymous-class