我有一个具有抽象 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 无法解决”。所以我试图返回这个:
返回新的 MyTile().getClass()
但现在 Eclipse 告诉我:
类型不匹配:无法从 Class
<
capture#1-of 转换?将 B.MyTile 扩展为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()
是不对的,不是吗?