我有一个带有两个变量的 Enum 类:int id和boolean collidable.
有没有办法制作一个只接收第一个变量并正确填充第二个变量的构造函数?请注意,第一个类变量是 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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我想知道是否有办法直接访问与给定 id 对应的值,但我想没有。我在另一篇文章中找到了这种方法,我想我会这样做。
public static TileID valueOf(int id) {
return Arrays.stream(values())
.filter(legNo -> legNo.id == id)
.findFirst().orElse(null);
}
Run Code Online (Sandbox Code Playgroud)
感谢所有帮助过的人。
您可以从另一个构造函数调用一个构造函数。
看一看:如何在 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;
}
Run Code Online (Sandbox Code Playgroud)
此外,您不必每次都指定 id。你可以:
关于您的编辑:
如果您使用Enum#ordinal()来快速检索相应的枚举,则有一种更快的方法。通过做:
public static TileID fromId(int id) {
return TileID.values()[id];
}
Run Code Online (Sandbox Code Playgroud)
但请注意,您可能希望保护此函数免受负值或过大值的影响。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |