我有这样的东西:
public abstract class Base{
public abstact T <T> method();
}
public class ExtendingClass extends Base{
public SomeObject method(){
}
}
然而,ExtendingClass#method
有一个警告类型安全:类型ExtendedClass的方法的返回类型SomeObject需要未检查的转换才能符合来自类型Base的T
你能告诉我为什么会这样,以及应该如何处理吗?
您可以使用:
public abstract class Base<T> {
public abstract T method();
}
和:
public class ExtendingClass extends Base<SomeObject >{
public SomeObject method(){
...
}
}
之所以会出现这种情况,是因为泛型参数除了出现在抽象方法声明中之外,不会出现在其他任何位置。
这个方法签名几乎等同于public abstract Object method()
。
来自java通用方法教程:
泛型方法允许使用类型参数来表示一个方法的一个或多个参数的类型之间的依赖关系和/或其返回类型。如果没有这样的依赖关系方法。
abstract class Base <T> {
public abstract T method();
}
public class test extends Base<String>{
@Override
public String method(){
return null;
}
}
编写具体示例时,必须为其传递正确的值,以便编译器能够在编译时验证该值