дженерики в Groovy - PullRequest
       13

дженерики в Groovy

6 голосов
/ 05 января 2010

Следующий Groovy код печатает "все работает"

def printIt(Class<? extends Exception> clazz) {
  println "it works"
}

printIt(String.class)

, хотя параметр не удовлетворяет ограничению Class<? extends Exception>

Насколько я понимаю, это потому что:

  1. Стирание типов в обобщенных типах Java означает, что нет проверки универсальных типов во время выполнения
  2. В Groovy нет проверки типов во время компиляции

Эти две точки означают, что в Groovy практически нет проверки ограниченных универсальных типов. Есть ли способ проверить (во время выполнения), что объект Class, переданный в printIt, удовлетворяет ограничению ? extends Exception

Спасибо, Дон

Ответы [ 2 ]

4 голосов
/ 05 января 2010

Проверьте эту ссылку .

[...] В некотором смысле это противоречит акцент динамических языков, где в Вообще, тип объектов не может определяться до времени выполнения. Но Groovy стремится разместить Java статическая типизация, когда это возможно, следовательно Groovy 1.5 теперь тоже понимает Обобщения. Сказав это, Groovy's поддержка дженериков не ставит целью быть полный клон дженериков Java. Вместо этого Groovy стремится разрешить генерики на уровне исходного кода (чтобы помочь сократить и вставка с Java) а также где имеет смысл позволить добро интеграция между Groovy и Java инструменты и API, которые используют дженерики. [...]

В заключение, я не думаю, что можно получить эту информацию во время выполнения.

1 голос
/ 07 января 2010

Поскольку вы знаете, что это должно быть исключением, это работает в Java (или Groovy):

// true if the class is a subclass of Exception
Exception.class.isAssignableFrom(clazz);

Это никоим образом не использует общую информацию, но также не будет доступно в Java.

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