我有一個具有抽象getType()方法的基類。我希望子類能夠實現此方法並提供實際的類來使用。返回Java中的嵌套類類型
在代碼中,類似如下:
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的告訴我:
類型不匹配:不能從 轉換類
<
捕獲#1的? 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)是否有可能得到這個與工作.Tile是一個接口?
2)使用基類時,是否真的是正確的路要走?
3)如何從方法內部返回嵌套的B.MyTile類引用?必須做new MyTile().getClass()
不可能是對的,可以嗎?
可能返回`Class`而不是非反射對象是一個壞主意。 – 2009-04-08 19:41:27
@Tom在檢查類型的上下文中返回類是一種非常常見的模式,它允許您在運行時檢查* checked *類型的集合,例如集合。我不知道其他方式,其實... –
Varkhan
2009-04-08 21:28:20