10

是否有任何简写方式来定义和使用通用定义,而不必不断重复特定的通用描述,这样如果有更改,我不必更改所有定义/用法,例如代码库可能是这样的:

Typedef myGenDef = < Object1, Object2 >;

HashMap< myGenDef > hm = new HashMap< myGenDef >();

for (Entry< myGenDef > ent : hm..entrySet())
{
.
.
.
}
4

5 回答 5

12

伪 typedef 反模式......

class StringList extends ArrayList<String> { }

好东西,喝!;-)

正如文章所指出的,这种技术有一些严重的问题,主要是这个“typedef”实际上是一个单独的类,因此不能与它扩展的类型或其他类似定义的类型互换使用。

于 2008-09-01T16:17:14.823 回答
4

在泛型方法中,您可以使用有限形式的类型推断来避免一些重复。

例子:如果你有这个功能

    <K, V> Map<K, V> getSomething() {
        //...
    }

您可以使用:

final Map<String, Object> something = getsomething();

代替:

final Map<String, Object> something = this.<String, Object>getsomething();
于 2008-09-01T16:23:54.387 回答
3

使用工厂模式创建泛型:

方法样本:

public Map<String, Integer> createGenMap(){
        return new HashMap<String,Integer>();

    }
于 2008-09-01T16:26:14.740 回答
2

Shog9 提到的伪 typedef 反模式可以工作——尽管不建议使用 ANTIPATTERN——但它并没有解决你的意图。伪类型定义的目标是减少声明中的混乱并提高可读性。

您想要的是能够通过一次交易替换一组泛型声明。我认为您必须停下来思考:“以巫术的方式有价值吗?”。我的意思是,我想不出你需要这个的场景。想象A类:

class A {
     private Map<String, Integer> values = new HashMap<String, Integer>();
}

现在想象一下,我想将“值”字段更改为地图。为什么会存在许多分散在需要相同更改的代码中的其他字段?至于使用“值”的操作,一个简单的重构就足够了。

于 2008-09-02T11:58:04.127 回答
1

不会。不过,groovy 是一种 JVM 语言,它是动态类型的,可以让您编写:

def map = new HashMap<complicated generic expression>();
于 2008-09-01T16:12:11.107 回答