题
是否有任何定义和使用通用定义的简写方法,而不必不断重复特定的通用描述,这样如果有更改,我不必更改所有定义/用法,尽管代码库可能是这样的:
Typedef myGenDef = < Object1, Object2 >;
HashMap< myGenDef > hm = new HashMap< myGenDef >();
for (Entry< myGenDef > ent : hm..entrySet())
{
.
.
.
}
解决方案
有的是 伪 typedef 反模式...
class StringList extends ArrayList<String> { }
好东西,喝了!;-)
正如文章指出的,这种技术有一些严重的问题,主要是这个“typedef”实际上是一个单独的类,因此不能与它扩展的类型或其他类似定义的类型互换使用。
其他提示
在泛型方法中,您可以使用有限形式的类型推断来避免一些重复。
例子:如果你有这个功能
<K, V> Map<K, V> getSomething() {
//...
}
您可以使用:
final Map<String, Object> something = getsomething();
代替:
final Map<String, Object> something = this.<String, Object>getsomething();
使用 工厂模式 用于创建泛型:
方法示例:
public Map<String, Integer> createGenMap(){
return new HashMap<String,Integer>();
}
Shog9 提到的伪 typedef 反模式可以工作 - 尽管不建议使用 ANTIPATTERN - 但它没有解决您的意图。伪 typedef 的目标是减少声明中的混乱并提高可读性。
您想要的是能够通过一次交易替换一组仿制药声明。我认为你必须停下来想一想:“它在巫术方面有价值吗?”。我的意思是,我想不出您需要这个的场景。想象一下A类:
class A {
private Map<String, Integer> values = new HashMap<String, Integer>();
}
现在想象一下,我想将“值”字段更改为地图。为什么会存在分散在代码中的许多其他字段需要相同的更改?至于使用“值”的操作,简单的重构就足够了。
不。不过,groovy(一种 JVM 语言)是动态类型的,可以让您编写:
def map = new HashMap<complicated generic expression>();
不隶属于 StackOverflow