我宣布枚举为:
enum Sex {MALE,FEMALE};
Run Code Online (Sandbox Code Playgroud)
然后,迭代枚举,如下所示:
for(Sex v : Sex.values()){
System.out.println(" values :"+ v);
}
Run Code Online (Sandbox Code Playgroud)
我检查了Java API但找不到values()方法?我很好奇这个方法来自哪里?
API链接:https: //docs.oracle.com/javase/8/docs/api/java/lang/Enum.html
我目前正在以下列方式创建整数常量.
public class Constants {
public static int SIGN_CREATE=0;
public static int SIGN_CREATE=1;
public static int HOME_SCREEN=2;
public static int REGISTER_SCREEN=3;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试以枚举方式执行此操作时
public enum PAGE{SIGN_CREATE,SIGN_CREATE,HOME_SCREEN,REGISTER_SCREEN}
Run Code Online (Sandbox Code Playgroud)
当我用PAGE.SIGN_CREATE它时应该返回1;
我从Android中的Native代码接收long或int形式的返回值,我想转换或与enum匹配,用于处理目的.可能吗 ?怎么样?
是否可以使用新的Android架构组件和房间持久性库将Enum类型用作Entity类中的嵌入字段?
我的实体(带有嵌入式枚举):
@Entity(tableName = "tasks")
public class Task extends SyncEntity {
@PrimaryKey(autoGenerate = true)
String taskId;
String title;
/** Status of the given task.
* Enumerated Values: 0 (Active), 1 (Inactive), 2 (Completed)
*/
@Embedded
Status status;
@TypeConverters(DateConverter.class)
Date startDate;
@TypeConverters(StatusConverter.class)
public enum Status {
ACTIVE(0),
INACTIVE(1),
COMPLETED(2);
private int code;
Status(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的TypeConverter:
public class StatusConverter {
@TypeConverter
public static Task.Status toStatus(int status) {
if …Run Code Online (Sandbox Code Playgroud) 我有两个阵列:墙和邻居.
public boolean[] walls = new boolean[4];
public Cell[] neighbors = new Cell[4];
Run Code Online (Sandbox Code Playgroud)
我有一个枚举:
enum Dir
{
North,
South,
East,
West
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够通过他们的方向访问墙壁或邻居,所以我不必传递一堆魔法索引.
但是,当我阅读Enum.ordinal()的文档时,它说程序员几乎没有使用这种方法,这让我认为它不应该以这种方式使用.
我在想做类似的事情:
List<Dir> availableDirections = new ArrayList<Dir>();
for(Dir direction : Dir.values())
if (!Neighbors[direction.ordinal()].Visited)
availableDirections.add(direction);
Run Code Online (Sandbox Code Playgroud)
甚至:
return Neighbors[Dir.North.ordinal()];
Run Code Online (Sandbox Code Playgroud)
我应该恢复使用设置为索引值的NORTH,SOUTH,EAST,WEST的静态常量还是使用Enum的序数方法?
我正在实施一个2人游戏,它将在紧密的循环中运行数十万次,然后是性能至关重要.
我的代码实际上看起来像这样:
public class Table {
private final int WHITE_PLAYER = +1;
private final int BLACK_PLAYER = -1;
private final int currentPlayer;
private final int otherPlayer;
...
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果我选择更换会有任何性能损失
private final int WHITE_PLAYER = +1;
private final int BLACK_PLAYER = -1;
Run Code Online (Sandbox Code Playgroud)
枚举定义为
public enum Players {
WhitePlayer,
BlackPlayer
}
Run Code Online (Sandbox Code Playgroud)
我认为枚举只是整数常量的语法糖,并且对于测试枚举生成的字节码以及调用它的代码进行釉面查看,似乎表明使用它们确实与制作静态相同方法调用,但是对于在首次运行时设置的某些枚举基础结构.
我的假设是,确实使用枚举作为静态常量是正确的还是我错过了什么?
我有枚举 A、B、C。在一个方法中,我得到两个不同的枚举,并且必须返回剩余的枚举。
示例:我收到 A,CI 必须返回 B
我的解决方案是使用 if elseif else:
private EnumABC findRemaining(EnumABC pEnum1, EnumABC pEnum2){
if((pEnum1 == EnumABC.A || pEnum2 == EnumABC.A)
&& (pEnum1 == EnumABC.B || pEnum2 == EnumABC.B)){
return EnumABC.C;
} else
if((pEnum1 == EnumABC.A || pEnum2 == EnumABC.A)
&& (pEnum1 == EnumABC.C || pEnum2 == EnumABC.C)){
return EnumABC.B;
} else{
return EnumABC.A;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有比这更可读的解决方案。
enums ×6
java ×6
android ×2
android-architecture-components ×1
android-ndk ×1
android-room ×1
constants ×1
performance ×1
readability ×1