作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
实体接口(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>
第二类参数 Id
在 Dao
的意义上不是多余的在两个类型参数上进行参数化,一个有界类型 T
及其他Id
,另外,Entity
在 Id
上进行参数化. (看区别,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/
我是一名优秀的程序员,十分优秀!