我有一些泛型代码片段被剥离到它的核心看起来像这样。有微不足道的通用接口在Java中避免使用泛型的警告
public interface Doubler<T> {
T doubling (T param);
}
并没有返回该接口的不同实例
public class DoublerFactory {
public static void main(String[] args) {
Doubler<String> input = produceDoubler("String");
System.out.println(input.doubling(args[0]));
}
public static <T> Doubler<T> produceDoubler(String type) {
Doubler result;
switch (type) {
case "Integer" : result = new IntDoubler(); break;
case "Float" : result = new FloatDoubler(); break;
case "String" : result = new StringDoubler(); break;
default: result = null;
}
return result;
}
static class IntDoubler implements Doubler<Integer> {
@Override
public Integer doubling(Integer param) {
return param*2;
}
}
static class FloatDoubler implements Doubler<Float> {
@Override
public Float doubling(Float param) {
return param*2;
}
}
static class StringDoubler implements Doubler<String> {
@Override
public String doubling(String param) {
return param + param;
}
}
}
一切正常,除了在工厂方法“produceDoubler”最后一行产生“未分配”警告工厂方法。我实际上明白了为什么 - 我无法弄清楚如何编写这段代码,以便Java编译器完全满意分配。
不要对'String'值进行操作。使用'类'与路易的建议[这里](http://stackoverflow.com/questions/9088782/enforce-generic-types-in-maps-in-relation-to-key-value-generics)。 –