看看这三个类。 Minatchi允许自己扩展,以便其方法的返回类型也可以扩展。为了说明,我使用了一种静态方法。Java泛型扩展返回类型的方法
public class Minatchi<T extends Minatchi<?>>{
static public <T extends Minatchi<?>>
List<T> listAll(){
return
(List<T>) query();
}
}
于是我继承Minatchi到夫人
public class Lady
extends Minatchi<Lady>{
}
这是可疑的行为发生。
public class HelloMinatchi{
private void listA(){
List<Lady> uvs = Lady.listAll();
for (Lady uv: uvs){
logger.info(uv.getName());
}
}
private void listB(){
for (Lady uv: Lady.listAll()){
logger.info(uv.getName());
}
}
}
方法listA和listB基本相同。 listA将列表放入中间变量uvs, 而列表B直接将listAll放入for-loop标头。
但是,对于listB,编译器抱怨无法将Minatchi <?>转换为Lady。
所以这个问题是关于Java泛型的设计完整性。还有另一种泛型抱怨。
这是一个故意的设计功能还是Java通用设计人员不知道如何解决的无意设计错误。如果有意为之,他们为什么这样做?如果有错误,他们是否打算解决它?
或者这是我个人的问题,我不知道更好的方式来声明泛型?如果是这样,告诉我如何。
(我使用的通用Minatchi类,因为我已非静态方法暴露于类扩展过,这是我在这个问题排除在外。)
我使用了一个通用的Minatchi类,因为我有非静态方法也暴露给类扩展,我忽略了题。 – 2010-01-14 13:17:07