不安全投警告我很新的Java的泛型。但我读过很多摘要链接和示例。但我无法得到最简单的方法。我希望somenoe可以帮助:如何避免与Java的泛型
我想创建哪一个未定义的对象映射到另一个HashMap中。两个对象都可以是String或Integer中的一个。
所以我写了这一点:
private final HashMap<L, R> left2Right = new HashMap<L, R>();
Extractor<?> extLeft = Extractor.getInstance(0);
Extractor<?> extRight = Extractor.getInstance(1);
L leftVal = extLeft.extract(d, i);
R rightVal = extRight.extract(d, i);
this.left2Right.put(leftVal, rightVal);
到目前为止好......但我有执行提取对象的问题。他们被工厂模式所影响。我做了这样的(simplyfied):
abstract class Extractor<E> {
abstract E extract(DTable source, int row);
static <E> Extractor<E> getInstance(int type) {
if(type == 0)
return new IntExtractor();
else
return new StringExtractor();
}
}
class IntExtractor extends Extractor<Integer> {
@Override
Integer extract(DTable source, int row) {
int value = 5;
return new Integer(value);
}
}
class StringExtractor extends Extractor<String> {
@Override
String extract(DTable source, int row) {
String retVal = "hello";
return retVal;
}
}
它编译,但我得到的铸造整数/字符串E.我在做什么错取消保存投警告?我知道,我可以简单地抑制警告。但我认为这应该是Java泛型的优势?我不能让这个转换保存,因为我不知道,哪种类型的“E”真的“是” ......
还是我做的事情基本上是错了吗?
注: 我修改了代码,一个“新”的问题,我用从第一个答案的一些信息后...
我确实有这样的感觉,你没有告诉我们这个问题的一切...... – Bombe 2012-02-29 08:49:45