дженерики в Groovy

Следующая печать кода 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

Спасибо, Дон

6
задан Colin Gislason 5 January 2010 в 19:06
поделиться

2 ответа

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

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

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

1
ответ дан 17 December 2019 в 04:47
поделиться

Проверьте это звено .

.

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

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

.
4
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: