Дженерики с Граалем - PullRequest
       3

Дженерики с Граалем

1 голос
/ 25 августа 2010

Что я пытаюсь сделать, это определить список, который запрашивает определенный тип (List<Integer>).Во время инициализации класса я помещаю в список String Я ожидаю, что он выдаст какую-то ошибку приведения во время выполнения.Но это не так - работает нормально.

Возможно, это Grails 101, но кто-то может объяснить, почему это работает, а также как заставить какой-то тип использовать в списке?

class Test {
    String name
    List<Integer> numbers
}

def myList = ['a','b','c']
Test myTest = new Test(name:'test', numbers:myList) 
myTest.numbers.each() { print " $it" }

Output:
a  b  c

1 Ответ

5 голосов
/ 25 августа 2010

Даже в Java этот код не будет выдавать никаких ошибок времени выполнения, поскольку нет проверки типов во время выполнения обобщений. Однако эквивалентный Java-код этой строке вызовет ошибку времени компиляции:

Test myTest = new Test(name:'test', numbers:myList) 

хотя в Java можно сделать то же самое без ошибок во время компиляции, используя отражение и другие хитрости.

Краткий ответ, почему это не приводит к ошибке времени компиляции в Groovy, заключается в том, что проверки типов во время компиляции в Groovy намного слабее, чем в Java. Даже если универсальный тип не проверяется компилятором Groovy, он все равно полезен с точки зрения читабельности и документации.

как заставить какой-то тип использовать в списке?

AFAIK, нет способа сделать это в Groovy

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