在下面的示例中,我似乎无法消除未经检查的警告(除了禁止警告)。正如你在“2”中所看到的指定类型会导致编译错误。
压制是这里唯一的选择吗?
static class Cat { }
static class CatGiver<T extends Cat> {
T cat;
CatGiver(T cat) {
this.cat = cat;
}
static <T extends Cat> CatGiver<T> get() {
// 1. Unchecked assignment warning
return new CatGiver(new Cat());
// 2. Compile error on 'new Cat()' "T cannot be applied to Cat..."
// return new CatGiver<T>(new Cat());
}
}发布于 2019-09-04 13:55:53
首先,您要创建一个原始类型。您需要指定类型。其次,您的静态方法,'T‘不是变量,您只能返回一个猫。
static CatGiver<Cat> get() {
return new CatGiver<Cat>(new Cat());
}您可以通过将cat或类的实例作为duplicate question中的答案传递给您的cat是泛型类型。
static <T extends Cat> CatGiver<T> get(T cat){
return new CatGiver<>(cat);
}那么T应该从论点中隐式地获得。(我还没有测试过。)
https://stackoverflow.com/questions/57789589
复制相似问题