为什么匿名类不能直接实现多个接口?仅仅是因为语法还是有其他原因?

2022-09-01 18:33:40

在一个内部问题中,为什么java匿名类不能同时实现和子类?还是仅仅因为语法?


答案 1

在一个内部问题中,为什么java匿名类不能同时实现和子类?

我相信这是由于语法原因造成的99%。类型参数甚至支持交集类型(),所以我认为这样的功能不会引入任何矛盾或复杂性。<T extends InterfaceX & InterfaceY>

例如,像这样的表达式可以编译成类似的东西new (InterfaceX & InterfaceY)() { ... }

interface InterfaceXandY extends InterfaceX, InterfaceY {}
... new InterfaceXandY() { ... }

之所以没有添加此类功能,很可能是因为这是一个罕见的用例,有一个简单的解决方法。


在一个有点相关的音符上。例如,您可以让 lambda 实现,方法是Serializable

Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");

请参阅如何序列化 lambda?


答案 2

仅语法,所谓的匿名类是100%的正态类。通过使用java.lang.reflect.Proxy和InvocationHandler,你可能会得到一个时髦的结果,这将是最肮脏的方法。

更简单的方法包括在方法中声明类并仅添加“实现”,


推荐