【发布时间】:2011-03-25 13:30:57
【问题描述】:
我最近想了解更多有关泛型方法的信息并创建了几个示例,但我不清楚以下类型安全性。举个例子:
public class GeneralMethod
{
public static void main( String[] args )
{
Repository rep = new Repository();
Set<ConcreteObject> set = rep.getObject();
}
}
abstract class AbstractRepository
{
public abstract <T extends SuperObject> Set<T> getObject();
}
class Repository extends AbstractRepository
{
@Override
public Set<ConcreteObject> getObject() //<- Type safety!
{
return new HashSet<ConcreteObject>();
}
}
abstract class SuperObject
{
}
class ConcreteObject extends SuperObject
{
}
在 Eclipse 中 Repository.class 出现以下类型安全:
Type safety: The return type Set < ConcreteObject > for getObject() from the type Repository needs checked conversion to conform to Set < SuperObject > from the type AbstractRepository
为什么编译器要符合Set < SuperObject > instead of Set < T extends Superobject >?
你会如何告诉每个 Repository 用自己的类型实现 getObject() 方法,并且只在方法签名中使用泛型? (意思是没有在类签名中定义泛型)。
谢谢你, 梅内
【问题讨论】: