¿Por qué el compilador indica que no existe una instancia máxima única?

Tengo las siguientes clases:

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);
    }
}

Y..

/** 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;
  }
}

Cuando compilo, aparece el siguiente error.

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()

No sucede en Eclipse, que, por lo que puedo decir, está usando el mismo JDK que mi versión Ant. He visto laSO hilo sobre el problema del compilador de Sun, pero parecía ser para métodos estáticos que declaran tipos sobre la marcha.

¿Por qué recibo este error y, lo que es más importante, cómo puedo solucionarlo?

Hasta ahora, el único motivo por el que he encontrado es lanzar mi método de esta manera:

@SuppressWarnings({"unchecked"})
public T getObject() {
    return (T) get(OBJECT); //yuck
}

Diciendo que estoy en crack y esta es la forma correcta es aceptable.

Respuestas a la pregunta(4)

Su respuesta a la pregunta