Использование интерфейсов в Java / Kotlin - PullRequest
0 голосов
/ 02 июня 2019

Я читал, что в Java "интерфейсы не могут быть созданы - они могут быть реализованы только классами или расширены другими интерфейсами".

Однако я могу прекрасно написать:

val set = setOf<String>("one", "two")

inКотлин, с set типа Set<String>.

Разве это не противоречит моему первому утверждению, когда я создаю экземпляр Set?

1 Ответ

0 голосов
/ 02 июня 2019

Я читал, что в 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 метод для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...