小编jud*_*ine的帖子

另一个泛型类的Java泛型类

我有一个基本的泛型类,代表我的模型中具有任何类型标识符的所有对象:

public abstract class IdObject<T> {
    private T    id;
    public  T    getId()     { return this.id; }
    public  void setId(T id) { this.id = id;   }
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个代表 IdObject 对象的 DAO 的超级接口:

public interface IdObjectDAO<T extends IdObject<U>> {
    public T getObjectById(U id);
}
Run Code Online (Sandbox Code Playgroud)

但我收到“U 无法解析为类型”的编译器错误。如果我通过以下方式更改接口定义:

public interface IdObjectDAO<T extends IdObject<U extends Object>> {...}
Run Code Online (Sandbox Code Playgroud)

我收到“标记“扩展”,预期的语法错误的编译器错误。在没有编译器错误的情况下定义接口的唯一方法是:

public interface IdObjectDAO<T extends IdObject<? extends Object>> {...}
Run Code Online (Sandbox Code Playgroud)

但是然后我没有该public T getObjectId(U id)方法的类型别名(U)。我发现解决它的唯一解决方案是使用 2 个类型参数:

public interface IdObjectDAO<T extends IdObject<U>, U> {...}
Run Code Online (Sandbox Code Playgroud)

但我想避免使用这两个类型参数来避免在模型和 DAO 类中指定标识符类型:

public …
Run Code Online (Sandbox Code Playgroud)

java generics dao interface

6
推荐指数
1
解决办法
909
查看次数

标签 统计

dao ×1

generics ×1

interface ×1

java ×1