Почему компилятор утверждает, что уникального максимального экземпляра не существует?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему компилятор утверждает, что уникального максимального экземпляра не существует?

Сообщение Anonymous »

У меня есть следующие классы:

Код: Выделить всё

public class Obj 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 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 cannot be determined; no unique maximal instance exists for type variable X with upper bounds T,java.lang.Object -> getObject()
Этого не происходит в Eclipse, который, насколько я могу судить, использует тот же JDK, что и моя сборка Ant. Я видел ветку SO о проблеме с компилятором Sun, но, похоже, это касалось статических методов, объявляющих типы на лету.

Почему я получаю эту ошибку и, что более важно, как ее обойти?

Пока единственная причина, по которой я нашел, - это использовать мой метод следующим образом:

Код: Выделить всё

@SuppressWarnings({"unchecked"})
public T getObject() {
return (T) get(OBJECT); //yuck
}
Сказать, что я употребляю крэк, и это правильный способ, приемлемо.

Подробнее здесь: https://stackoverflow.com/questions/566 ... nce-exists
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»