我有以下类(class):
public class Obj<T> extends BaseModel {
public static final String OBJECT = "object";
public Obj(T object) {
setObject(object);
}
public T getObject() {
return get(OBJECT);
}
public void setObject(T object) {
set(OBJECT, object);
}
}
还有……
/** This is a 3rd party library class **/
public class BaseModel implements ModelData, Serializable {
//...members and stuff...
@SuppressWarnings({"unchecked", "rawtypes"})
public <X> X get(String property) {
X obj = null;
if (start > -1 && end > -1) {
Object o = map.get(property.substring(0, start));
String p = property.substring(start + 1, end);
if (o instanceof Object[]) {
obj = (X) ((Object[]) o)[Integer.valueOf(p)];
} else if (o instanceof List) {
obj = (X) ((List) o).get(Integer.valueOf(p));
} else if (o instanceof Map) {
obj = (X) ((Map) o).get(p);
}
} else {
obj = (X) map.get(property);
}
return obj;
}
}
编译时出现以下错误。
type parameters of <X>X cannot be determined; no unique maximal instance exists for type variable X with upper bounds T,java.lang.Object -> getObject()
在 Eclipse 中不会发生这种情况,据我所知,它使用与我的 Ant 构建相同的 JDK。我看过SO thread about the Sun compiler issue ,但这似乎是用于动态声明类型的静态方法。
为什么我会收到此错误,更重要的是,我该如何解决?
到目前为止,我发现的唯一原因是像这样输入我的方法:
@SuppressWarnings({"unchecked"})
public T getObject() {
return (T) get(OBJECT); //yuck
}
告诉我我正在崩溃,这是正确的方法是可以接受的。
最佳答案
这是假的bug已在 Java SE 7 中修复。
关于java - 为什么编译器声明不存在唯一的最大实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666027/