Почему этот код не возможен в Kotlin? - PullRequest
0 голосов
/ 14 мая 2018

Ниже приведена отличная конструкция на C ++, C # и других подобных языках. Почему это невозможно в Котлине

open class EndPoint<T> (url: String): T{

...
}

class BlueEndPoint: EndPoint<BlueInterface>{}
class RedEndPoint: EndPoint<RedInterface>{}

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Потому что Kotlin использует шаблоны, а не шаблоны. Он имеет только один класс EndPoint вместо создания нового для каждого T, как в C ++.

И в JVM этот класс должен расширять ровно один суперкласс (возможно, Object) и определенный набор интерфейсов (возможно, ни одного). То есть вы не можете иметь EndPoint<BlueInterface> орудие BlueInterface, но не RedInterface и наоборот для EndPoint<RedInterface>.

Согласно MSDN, он также не работает в C # (я считаю, что CLR предъявляет те же требования при определении классов):

C # не позволяет использовать параметр типа в качестве базового класса для универсального типа.

Это C ++, который здесь является исключением.

0 голосов
/ 14 мая 2018

Это вызвано ограничениями обобщений JVM.Более подробную информацию вы можете прочитать [здесь] (https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html).

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