Grails的泛型

Pri*_*mus 1 generics grails groovy

我要做的是定义一个要求特定类型(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
Run Code Online (Sandbox Code Playgroud)

Dón*_*nal 5

即使在Java中,该代码也不会抛出任何运行时错误,因为没有运行时类型检查泛型.但是,此行的等效Java代码将生成编译时错误:

Test myTest = new Test(name:'test', numbers:myList) 
Run Code Online (Sandbox Code Playgroud)

虽然可以在Java中使用反射和其他技巧在没有编译时错误的情况下执行相同的操作.

简单回答为什么这不会在Groovy中生成编译时错误是因为Groovy的编译时类型检查比Java更宽松.即使Groovy编译器没有检查泛型类型,从可读性和文档的角度来看它仍然是有用的.

我如何强制某些类型在列表中使用?

AFAIK在Groovy中无法做到这一点