问候,
我找到了一个使用Flag的C ++遗留代码,后来根据完成的读取更新了标志的状态:
主档案:
#define VINCULACION 0x00000004L
#define DET_VINCULACION 0x00000008L
long unsigned FlagRead ;
int formerMethod(){
if ((FlagRead & VINCULACION)==0) ReadVinculacion();
//... DO MORE
}
int ReadVinculacion(){
//.. Do DB operations to read Vinculacion variables.
FlagRead|=VINCULACION;
return 1;
}
//.. Same similar methods to ensure reading DET_VINCULACION but not doing it twice.
现在用Java开发我没有使用带有整数或长整数的常量作为使用枚举的好习惯。
在java下使用枚举执行相同任务是否有性能明智且可靠的方法?
谢谢!
答案 0 :(得分:6)
看一下使用EnumSet
代替C ++代码中的FlagRead
变量:
枚举集在内部表示为位向量。这种表现非常紧凑和高效。这个类的空间和时间性能应该足以使其成为传统的基于int的“位标志”的高质量,类型安全的替代品。
然后,您可以使用set.contains(YourEnum.SOME_VALUE)
答案 1 :(得分:-1)
问候,
我创建了每个建议,一个枚举文件:Constants.java
public enum Constantes {
VINCULACION,
DET_VINCULACION;
}
然后在Main.java上:
private final EnumSet<Constantes> flagRead;
public boolean needsToRead(Constantes constantParameter) {
return (flagRead.contains(constantParameter) == false);
}
public void markAsRead(Constantes constantParameter){
flagRead.add(constantParameter);
}
然后需要检查是否已经读取了关于变量的信息集,然后我在文件Process.java中进行下一次检查:
private Main m = new Main();
public int newMethod(){
if (m.needsToRead(Constantes.VINCULACION)){
ReadVinculacion();
}
//... DO MORE
}
public void readVinculacion(){
//.. Do DB operations to read Vinculacion variables.
m.markAsRead(VINCULACION);
}
我做了基本单元并运行测试,它可以模拟所需的过程。
谢谢!