java - Java:枚举类构造函数
问题描述
我有一个带有两个变量的 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;
}
}
编辑:
我想知道是否有办法直接访问与给定 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。你可以:
- 使用您递增的静态 int
- 使用Enum#ordinal()将返回值在枚举中的“位置”
关于您的编辑:
如果您使用Enum#ordinal()快速检索相应的枚举,则有一种更快的方法。通过做:
public static TileID fromId(int id) {
return TileID.values()[id];
}
但请注意,您可能希望保护此函数免受负值或太大值的影响。
推荐阅读
- c++ - 为什么类构造函数为其成员生成析构函数?
- javascript - 在 React 中理解 array.map() 范围的问题
- javascript - 它不会在控制台内的面向对象的 JavaScript 中显示“this”对象
- ios - 如何使用 AWS Cognito 和 iOS 开发工具包更改用户的临时密码?
- html - 不支持 Vue CLI3 应用程序、HTML srcset 和尺寸属性?
- async-await - 这是等待异步内容的正确用法吗?
- android - 我想设置一个应用栏但失败了,如何解决这个问题?
- javascript - 过渡组动画在添加第三个元素时改变行为
- ios - 降级框架
- angular - 如何从代码刷新 ngIf 方法调用