对于我的项目,我将许多对象分为 10 个类。每个对象都可以执行一些操作,这些操作必须事先注册(每个类只注册一次操作)。为每个类定义的操作表示为public final static
整数。我想在运行时动态分配操作的ID(每个类的操作数目前约为20,并且数量会增加)。
问题出现了,当执行操作时,我必须找到正在执行的操作(我使用 switch 语句)。
这是一个简单的工作代码示例:
public class Test {
final static int foo = 8;
final static int bar = 10;
public static void main(String[] args)
{
int x=10;
switch(x)
{
case foo:
System.out.println("FOO");
break;
case bar:
System.out.println("BAR");
break;
default:
System.out.println("PROBLEM");
}
}
}
此代码通常会编译并显示BAR
.
但是这个稍微转换的代码会产生一个Unresolved compilation problem
with case expressions must be constant expressions
。
public class Test {
final static int foo;
final static int bar;
static
{
foo=8;
bar=10;
}
public static void main(String[] args)
{
int x=10;
switch(x)
{
case foo:
System.out.println("FOO");
break;
case bar:
System.out.println("BAR");
break;
default:
System.out.println("PROBLEM");
}
}
}
这些代码不应该实际工作和编译吗?在解决此问题之前,我无法动态执行任何操作?或者还有其他方法吗?
谢谢
编辑:由于使用枚举的想法,我想解决这个问题:
public class Test {
enum OperationSet1 {
FOO, BAR, THESE, ARE, ALL, DIFFERENT, OPERATIONS
}
enum OperationSet2 {
FOO, BAR, NOW, SOME, OTHER, OPS
}
public static void main(String[] args) {
OperationSet1[] ops = new OperationSet1[10];
for (int i=0; i<ops.length; i++)
ops[i] = OperationSet1.values()[(int)(Math.random()*OperationSet1.values().length)];
OperationSet2[] ops2 = new OperationSet2[10];
for (int i=0; i<ops.length; i++)
ops[i] = OperationSet2.values()[(int)(Math.random()*OperationSet2.values().length)];
for (OperationSet1 op:ops)
handleOperation(op);
}
for (OperationSet2 op:ops2)
handleOperation(op);
}
public static void handleOperation(Object? op) {
switch(op) {
/**code to handle**/
}
}
}
我们有两个枚举,我想要一个处理函数(最好使用 switch 语句),它可以处理这两个枚举中出现的所有情况。
EDIT2:所以这里。我有 10 个类(C1, C2, ..., C10)
和这些类的大约 40 个对象。这些对象中有些是所谓的所有者,有些是共享的。每个共享对象都有一个所有者(这是基本关系——它与 java 继承没有任何关系)。
现在每个共享对象都会obj
不时发生变化,这obj
需要询问其所有者own
是否可能发生变化(这只是其中一种操作)然后它会发生变化(并再次通知所有者)。对象obj
还有一组他可以执行的预定义操作,C1
由enum
. 因此own
必须有一个处理类的对象操作的函数C1
。现在我们有一个obj2
属于类的对象C2
,具有不同的操作集和相同的所有者own
。obj
只能执行 中定义的操作,C1
并且obj2
只能执行 中定义的操作C2
。
如何概括处理函数,以便将其编写整齐?我什至应该使用枚举吗?