내 프로젝트의 경우 많은 개체가 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
이고 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**/
}
}
}
: 때문에 나는이 문제를 해결하고자하는 열거 형을 사용하는 아이디어 :
감사
편집 문),이 두 enums에 apperaing 모든 경우를 처리합니다.
EDIT2 : 여기 있습니다. 나는이 클래스들의 약 40 개의 객체들과 (C1, C2, ..., C10)
클래스를 가지고있다. 이러한 개체 중 일부는 소위 소유자이며 일부는 공유됩니다. 각 공유 객체에는 소유자가 있습니다 (기본 관계 - java 상속과 아무 관계가 없습니다). 이제
공유 객체 때때로 obj
변경이 obj
요구의 각이 변경 될 경우 (이것은 단지 작업 중 하나입니다) 다음은 변경 소유자 own
에게 (다시 소유자 통지)하는 . 객체 obj
에는 수행 할 수있는 미리 정의 된 작업 집합이 있으며 C1
에 enum
으로 정의됩니다. 따라서 own
에는 C1
클래스의 오브젝트 조작에 대한 처리 함수가 있어야합니다. 이제 우리는 C2
클래스의 객체 obj2
을 가지고 있고 다른 작업 집합과 동일한 소유자 own
을 가지고 있습니다. obj
은 C1
에 정의 된 작업 만 수행하고 obj2
은 C2
에 정의 된 작업 만 수행 할 수 있습니다.
처리 기능을 일반화하여 깔끔하게 작성하는 방법은 무엇입니까? 열거 형을 사용해야합니까?
직교의 질문 : 당신의 int가 아닌 열거를 사용하는 이유가 무엇입니까? –
아니요 이유는 없습니다 (제 생각 엔). 나는 정말 경험 많은 프로그래머가 아니므로 열거 형으로 구현하는 방법을 알지 못합니다. 나는 각각의 클래스가 public enum을 가질 것이라고 생각한다. 그렇다면 10 개 이상의 enum (각 클래스에 하나씩) 이상의 switch 문을 작성하는 방법은 무엇입니까? – Nejc
저는 열거 형을 좋은 생각으로 생각하지 않습니다. 특히 데이터베이스를 다루는 경우 특히 그렇습니다. –