java - 如何引用泛型类型参数的泛型类型参数?

标签 java generics compiler-errors

实体接口(interface):

public interface Entity<Id>
{
    Id getId();
}

和道:

public interface Dao<T extends Entity<Id>, Id>
{
    T find(Id id);
}

如果我尝试删除 Dao (Id) 上的第二个类型参数,我会得到“Id 无法解析为类型”。我的问题是是否有可能以某种方式摆脱 Dao 上的第二个类型参数,因为它本质上是多余的。

明确地说,我试图避免在使用 Dao 的所有地方重复 Id 类型。在 Entity 接口(interface)中指定一次该类型就足够了。

现在我必须像这样重复一遍:

private Dao<Car, UUID> carDb;

我使用 Car Dao 的所有地方。

最佳答案

这不可能。

Dao<T extends Entity<Id>, Id>第二类参数 IdDao 的意义上不是多余的在两个类型参数上进行参数化,一个有界类型 T及其他Id ,另外,EntityId 上进行参数化. (看区别,by this you are restricting the type parameter of Entity to be same as second type parameter of Dao)

只有在编译器已经知道 Entity 的 Type 参数的情况下才有可能。

interface Dao<T extends Entity<String>> {
    T find(String id);
}

关于java - 如何引用泛型类型参数的泛型类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256855/

相关文章:

java - 有条件地链式完成

java - 我在 java rmi 多客户端代码中遇到问题

Java DatagramPacket 读取原始数据类型

c# - 当泛型不匹配时,为什么泛型方法不能选择特定方法?

c# - 还有一个 "Use of unassigned local variable ' 随便什么'“问题

java - 具有通用元素的 Java 继承

java - 为什么我会收到类转换异常(使用泛型,可比较)?

c# - 如何确保泛型的不变性

java - Java GUI程序不会生成随机形状吗?

c# - 编译 XNA 项目时无法执行请求的操作错误