Есть внутренняя проблема, почему анонимные классы Java не могут реализовать и создать подкласс одновременно?
Я полагаю, что это 99% из-за синтаксических причин.Параметры типов даже поддерживают типы пересечений (<T extends InterfaceX & InterfaceY>
), поэтому я не думаю, что такая особенность привнесет какие-либо противоречия или сложности.
Выражение типа new (InterfaceX & InterfaceY)() { ... }
может, например, быть скомпилировано вчто-то вроде
interface InterfaceXandY extends InterfaceX, InterfaceY {}
... new InterfaceXandY() { ... }
Причина, по которой такая функция не была добавлена, наиболее вероятна, потому что это редкий случай использования, для которого есть простой обходной путь.
В некоторой связанной заметке,Вы можете позволить лямбда-реализации, например, Serializable
, выполнив
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
См. Как сериализовать лямбду?