我目前正在学习Groovy而且我遇到了泛型方法。
我想使用从参数类型推断的泛型返回类型来定义泛型方法。
在Java中,签名将是:
<T> T getBean(String name, Class<T> requiredType);
如何在Groovy中实现它?
答案 0 :(得分:7)
这适用于Groovy 2.2.1:
class MyCollection {
def map
public <T> void setMap(Map<String,T> map) {
this.map = map
}
public <T> T getBean(String name, Class<T> requiredType) {
return map.get(name)
}
}
def myc = new MyCollection()
Map<String,Integer> myMap = new HashMap<String,Integer>()
myMap.put("abc",123)
myMap.put("ijk",456)
myc.setMap(myMap)
assert 123 == myc.getBean("abc", Integer.class)
assert 456 == myc.getBean("ijk", Integer.class)
请注意,该方法是公开的。如果该方法被写为“包受保护”,则不会为我编译。
但是,此编辑适用于包范围:
import groovy.transform.PackageScope
class MyCollection {
// snip
@PackageScope <T> T getBean(String name, Class<T> requiredType) {