Generics 带Grails的泛型

Generics 带Grails的泛型,generics,grails,groovy,Generics,Grails,Groovy,我试图做的是定义一个列表,它要求一个特定类型的列表。在初始化类的过程中,我放入了一个字符串列表,我希望它抛出一些运行时强制转换错误。但事实并非如此——它运行良好 我肯定这可能是Grails101的东西,但有人能解释一下为什么这样做,以及我将如何强制在列表中使用某种类型吗 class Test { String name List<Integer> numbers } def myList = ['a','b','c'] Test myTest = new Test(

我试图做的是定义一个列表,它要求一个特定类型的列表。在初始化类的过程中,我放入了一个字符串列表,我希望它抛出一些运行时强制转换错误。但事实并非如此——它运行良好

我肯定这可能是Grails101的东西,但有人能解释一下为什么这样做,以及我将如何强制在列表中使用某种类型吗

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

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

Test myTest = new Test(name:'test', numbers:myList) 
尽管使用反射和其他技巧在Java中也可以做到同样的事情,而不会出现编译时错误

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

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

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

如果在Groovy中没有办法做到这一点,那么即使在Java中,代码也不会抛出任何运行时错误,因为没有泛型的运行时类型检查。但是,与此行等效的Java代码将生成编译时错误:

Test myTest = new Test(name:'test', numbers:myList) 
尽管使用反射和其他技巧在Java中也可以做到同样的事情,而不会出现编译时错误

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

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

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

好吧,在Groovy中没有办法做到这一点

我认为在Groovy++中是可能的,但我怀疑你是否可以将Groovy++与Grails结合使用。现在,你可以将Groovy++与Grails结合使用了,Alex将它移植到Groovy 1.7.4,并在这里发布了Grails插件的第一个版本,感谢所有的回复。我看了groovy文档中的泛型部分,其中提到了在源代码级别对泛型的支持,但仅此而已。正如Don所说,它有利于可读性我认为这在Groovy++中是可能的,但我怀疑你是否可以将Groovy++与Grails结合使用你现在可以将Groovy++与Grails结合使用了,Alex将它移植到Groovy 1.7.4,并在这里发布了Grails插件的第一个版本,感谢所有的回复。我看了groovy文档中的泛型部分,其中提到了在源代码级别对泛型的支持,但仅此而已。正如唐所说,这有利于可读性