我一直在嘗試在我的列舉中實作一個介面,以便為我正在制作的模擬制定規則。
我正在嘗試訪問列舉方法,例如values()
和ordinal()
(在物件上)。
但是,即使使用我的介面名稱為我的類設定上限,如果不在我的介面中覆寫它們,我仍然無法訪問這些方法,這是行不通的。
public interface State{
public static void setTileSize(int size){
return;
}
public void draw(PApplet app, int x, int y);
public Object updateState(int[] allNeighbours);
public int getColour();
}
enum WireWorld implements State{ // WireWorld
WIRE(new Color(100, 100, 100)) {
public WireWorld updateState(int[] allNeighbours){
if (allNeighbours[1] >= 1){
return TIP;
}
return WIRE;
}
}, ...
public class Tile<T extends State> {
public Tile() {
int enumCount = T.values().length;
}
}
我正在嘗試呼叫 Tile 上的建構式,但它不起作用。
uj5u.com熱心網友回復:
您需要提供一個T
擴展的指示,正如@Slaw在評論Enum
中提到的那樣。
我們可以通過使用 & 符號鏈接它們來宣告多個型別系結&
,因為Enum
它是一個需要在介面之前提到的類State
(請參閱):
public class Tile<T extends Enum<T> & State>
假設這Tile
意味著持有對型別的列舉成員T
的參考并呼叫類似ordinal()
and之類的方法name()
。現在編譯器將允許這樣做,因為它知道T extends Enum<T>
.
似乎您的意圖是在將包含許多列舉成員enumCount
的類中定義一個實體變數。為了初始化它,您需要提供一個實體作為建構式的引數。訪問所有列舉常量的方法之一是通過.Tile
Class<T>
Class<T>
EnumSet.allOf()
public class Tile<T extends Enum<T> & State> {
private int enumCount;
private T item;
public Tile(Class<T> enumClass) {
this.enumCount = EnumSet.allOf(enumClass).size();
}
public void someMethod() {
item.ordinal(); // that will compile
item.name(); // that will compile as well
}
// ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494541.html