我有一个基础通用类,代表了我的模型中所有具有任何类型标识符的对象:
我遇到了编译器错误"Syntax error on token 'extends', , expected"。唯一定义接口而不出现编译器错误的方法是:
但是我希望避免在模型和DAO类中使用这两个类型参数,以避免指定标识符类型。
public abstract class IdObject<T> {
private T id;
public T getId() { return this.id; }
public void setId(T id) { this.id = id; }
}
接下来,我有一个超级接口来代表这些IdObject对象的DAO:
public interface IdObjectDAO<T extends IdObject<U>> {
public T getObjectById(U id);
}
但是我遇到了“U 无法解析为类型”的编译错误。如果我通过以下方式更改接口定义:
public interface IdObjectDAO<T extends IdObject<U extends Object>> {...}
我遇到了编译器错误"Syntax error on token 'extends', , expected"。唯一定义接口而不出现编译器错误的方法是:
public interface IdObjectDAO<T extends IdObject<? extends Object>> {...}
但是我没有类型别名(U)用于public T getObjectId(U id)
方法。我找到的唯一解决方法是使用两个类型参数:
public interface IdObjectDAO<T extends IdObject<U>, U> {...}
但是我希望避免在模型和DAO类中使用这两个类型参数,以避免指定标识符类型。
public class Person extends IdObject<Integer> {...}
public interface PersonDAO extends IdObjectDAO<Person, Integer> {...}
^^^^^^^^^ <== avoid this
有没有其他方法来实现这个泛型的泛型或者定义IdObjectDAO
接口呢?
提前感谢!