簡體   English   中英

Java:枚舉 class 構造函數

[英]Java: Enum class constructor

我有一個枚舉 class 有兩個變量: int idboolean 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);
    }


感謝所有幫助過的人。

您可以從另一個構造函數中調用一個構造函數。

看看: 如何在 Java 中調用一個構造函數?

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。 你可以:

  • 使用您遞增的 static int
  • 使用Enum#ordinal()將返回值在枚舉中的“位置”

關於您的編輯:

如果您使用Enum#ordinal()快速檢索相應的枚舉,則有一種更快的方法。 通過做:

public static TileID fromId(int id) {
    return TileID.values()[id];
}

但請注意,您可能希望保護此 function 免受負值或太大值的影響。

當然,您始終可以使用ifswitch根據 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM