我正在尝试解决这个看似简单的通用转换问题:
首先,声明这个简单的通用对象:
public interface GenericObject<T> {}
其次,声明这个工作接口(interface):
public interface Generic { // I don't want to do Generic<T>
<T> void setGenericObject(GenericObject<T> obj);
}
然后,让我们实现这个接口(interface):
public class GenericImpl implements Generic {
private GenericObject<String> genericObject; // This is needed
@Override
public <String> void setGenericObject(GenericObject<String> obj) {
genericObject = obj; // eclipse give me this error :
// Type mismatch: cannot convert from
// interfaces.GenericObject<String> to
// interfaces.GenericObject<java.lang.String>
}
}
如何解决这个错误?
编辑:
实际上,解决这个问题的唯一方法就是这样做:
public class GenericImpl implements Generic {
private GenericObject<String> genericObject;
@SuppressWarnings("unchecked") // I don't realy like this
@Override
public <T> void setGenericObject(GenericObject<T> obj) {
genericObject = (GenericObject<String>) obj;
}
}
最佳答案
真正的问题是
public <String> void setGenericObject(GenericObject<String> obj)
其中String
与您想要的java.lang.String
无关。这里的String
只是一个类型参数,它的名字偶然是String
。
关于Java - 泛型 - 在泛型指定对象中转换泛型对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447816/