泛型 – Groovy中的通用方法

参见英文答案 > Groovy Generics failure                                    1个
我目前正在学习Groovy而且我遇到了泛型方法.

我想用泛型返回类型定义泛型方法,该方法是从参数类型推断出来的.

在Java中,签名将是:

<T> T getBean(String name,Class<T> requiredType);

我怎样才能在Groovy中实现它?

解决方法

这适用于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) {

相关文章

1.下载安装SuperScript插件-> jEdit Plugin Central 2.修改<jedit.home>/startup/startup.bsh...
c/c++ pascal basic java c# perl    自由王国的体现 groovy     lisp    波兰式, C C++ P...
目前的脚本语言已经很多了,包括Python、Ruby以及对应于java平台的Jython和JRuby。前一段时间对Python有...
看了点groovy的ml archives,争论不休的EOS/EOL问题。 C-style的语言本没有EOS问题,语法规定显式的...
昨天终于挑灯看完了http://www-106.ibm.com/developerworks/java/library/j-alj08034.html,很多年以后...
1.   从例子开始 a)        目的:演示Groovy的一些简单特性。   b)        代码: ...