[英]Java: Enum class constructor
我有一個枚舉 class 有兩個變量: int id
和boolean collidable
。
有沒有辦法制作一個只接收第一個變量並正確填充第二個變量的構造函數? 請注意,第一個 class 變量是 id,它對於 Enum 的每個類型值都不同。
public enum TileID {
Grass(1,false),
GrassTall(2,false),
GrassFlower1(3,false),
GrassFlower2(4,false),
Water(5,false),
GrassTwig(6,true),
GrassRock(7,true);
private final int id;
private final boolean collidable;
TileID(int id, boolean collidable) {
this.id = id;
this.collidable = collidable;
}
public int getId() {
return id;
}
public boolean isCollidable() {
return collidable;
}
}
編輯:
我想知道是否有辦法直接訪問與給定 id 對應的值,但我想沒有。 我在另一篇文章中找到了這種方法,我想我會這樣做。
public static TileID valueOf(int id) {
return Arrays.stream(values())
.filter(legNo -> legNo.id == id)
.findFirst().orElse(null);
}
感謝所有幫助過的人。
您可以從另一個構造函數中調用一個構造函數。
Grass(1),
GrassTall(2),
GrassFlower1(3),
GrassFlower2(4),
Water(5),
GrassTwig(6, true),
GrassRock(7, true);
TileID(int id) {
this(id, false); // false = default value of 'collidable'
}
TileID(int id, boolean collidable) {
this.id = id;
this.collidable = collidable;
}
此外,您不必每次都指定 ID。 你可以:
關於您的編輯:
如果您使用Enum#ordinal()快速檢索相應的枚舉,則有一種更快的方法。 通過做:
public static TileID fromId(int id) {
return TileID.values()[id];
}
但請注意,您可能希望保護此 function 免受負值或太大值的影響。
當然,您始終可以使用if
或switch
根據 id 設置可collidable
字段,只要不存在任何具有相同id
字段但可collidable
字段值不同的常量。
做就是了
TileID(int id) {
this.id = id;
this.collidable = id > 5; //or some other condition
}
然后省略常量中的第二個參數( Grass(1), GrassTall(2), ...;
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.