我有类似的东西:
public abstract class Base{
public abstact T <T> method();
}
public class ExtendingClass extends Base{
public SomeObject method(){
}
}
但是,ExtendingClass#method
有警告类型安全:从ExtendingClass类型的方法的返回类型SomeObject需要未经检查的转换以符合
来自Base类型的
您能告诉我为什么会这样,以及如何处理?
答案 0 :(得分:3)
你可以使用:
public abstract class Base<T> {
public abstract T method();
}
和
public class ExtendingClass extends Base<SomeObject >{
public SomeObject method(){
...
}
}
这是因为除了抽象方法声明之外,通用参数不会出现在其他地方。
此方法签名几乎等同于public abstract Object method()
。
来自java generic methods tutorial:
通用方法允许使用类型参数来表达 方法的一个或多个参数的类型之间的依赖关系 和/或其返回类型。如果没有这样的依赖,那就是泛型 方法不应该使用。
答案 1 :(得分:1)
abstract class Base <T> {
public abstract T method();
}
public class test extends Base<String>{
@Override
public String method(){
return null;
}
}
在编写具体示例时,必须为其传递适当的值,以便编译器可以在编译期间验证该值