【发布时间】:2010-10-18 09:12:56
【问题描述】:
我有一个具有抽象 getType() 方法的基类。我希望子类能够实现此方法并提供要使用的实际类。
在代码中,类似于以下内容:
public abstract class A {
public static interface Tile;
protected abstract Class<Tile> getTileClass();
}
public class B extends A {
public static class MyTile implements A.Tile { }
@Override
protected abstract Class<A.Tile> getTileClass() {
MyTile t = new MyTile(); // WORKS
return MyTile; // ERROR HERE
}
}
这里的问题是我在标记的行中得到“MyTile 无法解决”。所以我试图返回这个:
return new MyTile().getClass()
但现在 Eclipse 告诉我:
类型不匹配:无法从 Class
<capture#1-of ?扩展 B.MyTile>to Class<A.Tile>
我什至不确定 Eclipse 中是否存在错误(捕获#1?)。
接下来,我将放弃接口并尝试使用抽象基 Tile 类。在 Eclipse 的帮助下,我最终得到了以下似乎可以编译的代码:
public abstract class A {
public static abstract class Tile;
protected abstract Class<? extends Tile> getTileClass();
}
public class B extends A {
public static class MyTile exends A.Tile { }
@Override
protected abstract Class<? extends A.Tile> getTileClass() {
return new MyTile().getClass(); // WORKS
return MyTile; // "Cannot be resolved"
}
}
所以我基本上似乎有三个问题:
1) 是否有可能让它与 A.Tile 作为接口一起使用?
2) 使用基类时,Class<? extends X> 真的是正确的方法吗?
3) 如何从方法内部返回嵌套的 B.MyTile 类引用?不得不做new MyTile().getClass() 是不对的,不是吗?
【问题讨论】:
-
可能返回
Class而不是非反射对象是个坏主意。 -
@Tom 在检查类型的上下文中返回一个 Class
是一种非常常见的模式,它允许您检查例如集合的 checked 类型, 在运行时。我不知道其他方法,事实上......
标签: java class oop nested-class