Я читал, что в Java «интерфейсы не могут быть созданы - они могут быть реализованы только классами или расширены другими интерфейсами»
Это означает, что вы просто не можете писать
Set<String> set = new Set<String>(...);
(не путайте с new Set<String> { ... }
, который создает анонимный класс, реализующий Set
и создает экземпляр этого класса ).Вы можете написать Set.of("one", "two")
, хотя этот метод был добавлен только в Java 9. Это фабричный метод, как и Kotlin setOf
, а не «создание интерфейса».
Kotlin, эквивалентный нелегальному new Set
, будет
val set = Set<String>(...)
, что также не допускается.
Хотя Котлин намеренно стирает грань между конструкторами и методами;было бы идеально в соответствии с другими типами в стандартной библиотеке определить фабричный метод с именем Set
, который будет вызываться таким же образом, или operator fun invoke
в объекте-компаньоне.См. List
метод для примера.