열거 형은 상수입니다. 따라서 Stack disks
은 "열거 형 클라이언트가 원하는 모든 유형의 스택"이 될 수 없습니다. 고정식이어야합니다.
열거 형에 필드가있는 요점은 각 요소에 대한 추가 정보를 보유 할 수 있어야한다는 것입니다. 예를 들어 스택의 경우 A("a", "b")
, B("b", "c", "d")
일 수 있습니다. 각 요소는 스택에로드 할 항목을 지정합니다 (이 예에서는 varargs 생성자가 필요함). 그러나 그들의 유형은 정확하게 지정되어 있습니다. <T>
일 수 없습니다.
이클립스 컴파일러가 표시되는지 오류는 분명하다 :
구문 오류, 열거 선언 할 수 없습니다 유형 매개 변수
그러나
, 당신은 같은 것을 수행 할 수 있습니다
enum Foo {
A("foo", "bar"),
B(0, 1, 2);
private Stack<?> stack;
private <T> Foo(T... args) {
stack = new Stack<T>();
stack.addAll(Arrays.asList(args));
}
public <T> Stack<T> getStack() {
return (Stack<T>) stack;
}
}
을
다음 :
Stack<String> stack1 = Foo.A.getStack();
Stack<Integer> stack2 = Foo.B.getStack();
System.out.println(stack1);
System.out.println(stack2);
에 5,
결과 :
[foo, bar]
[0, 1, 2]
업데이트 : 이후 목표에 대한 의견 - 그 값이 변경되기 때문에 하노이 타워, 열거해서는 안됩니다. 대신 값이 스택 인 Map
에 대한 키로 열거 형을 사용해야합니다. 열거 형 필드를 사용하여 유혹하는 것처럼 보이지만 좋은 습관은 아닙니다. Enum은 상수가 좋습니다. 물론 위의 예를 통해 목표를 달성 할 수 있지만 Map
을 권하고 싶습니다.
왜 열거 형에 스택을 넣으시겠습니까? –
왜 사람들은 주제와 관련이없는 질문을하는 경향이 있습니까? – damluar
이므로 주제와 관련되어 있습니다. – Bozho