Следующая печать кода Groovy "это работает"
def printIt(Class<? extends Exception> clazz) {
println "it works"
}
printIt(String.class)
даже при том, что параметр не удовлетворяет ограничение Class<? extends Exception>
Мое понимание - то, что это вызвано тем, что:
Эти две точки означают, что нет эффективно никакой проверки ограниченных универсальных типов в Groovy. Есть ли любой способ, которым я могу проверить (во времени выполнения) что Class
объект передал printIt
удовлетворяет ограничение ? extends Exception
Спасибо, Дон
Поскольку вы знаете, что это должно быть Исключением, это работает на Java (или Groovy):
// true if the class is a subclass of Exception
Exception.class.isAssignableFrom(clazz);
Это ни в коем случае не использует общую информацию, но это также не было бы доступно на Java.
Проверьте это звено .
.[...] В некотором роде это противоречит акцент на динамические языки, где в вообще, тип объектов не может будет определено до начала работы. Но Groovy стремится к размещению Java's статический набор текста, когда это возможно, поэтому Грувый 1,5 теперь также понимает. Дженерики. Сказав это, Груви... поддержка дженериков не направлена на то, чтобы быть полный клон дженериков Явы. Вместо этого, Groovy стремится позволить дженерикам на уровне исходного кода (чтобы помочь сократить и вклеивание с Явы), а также откуда имеет смысл позволять добро интеграция между Грувым и Явой инструменты и API, использующие генерики.[...]
В заключение, я не думаю, что можно получить эту информацию во время выполнения.
.