두 개의 파서 클래스가 있으며 구문 분석에 실패하면 예외가 발생합니다. 나는 같은 예외, ParserException을 사용하고 싶다. 나는 실패의 원인이 된 필드 이름을 받아 들일 수있다. 열거 형을 사용하려고 생각했지만 주제가 완전히 명확하지 않다고 생각합니다.특정 열거 형 클래스의 수퍼 유형 매개 변수 사용
어떻게 ParserException 클래스에서 fieldName을 선언합니까? enum은 내가 이해하는 한 ParserA.Fields 및 ParserB.Fields의 상위 유형이어야하지만 허용되지 않습니다.
두 열거 형 클래스에는 다른 열거 집합이 들어 있습니다. 즉, 두 클래스는 동일한 클래스가 아닙니다.
public class ParserA {
public enum Fields {
A_FIRST_FIELD
A_SECOND_FIELD
}
public void parse() {
...
throw ParserException(Fields.A_FIRST_FIELD);
}
}
public class ParserB {
public enum Fields {
B_FIRST_FIELD
B_SECOND_FIELD
}
public void parse() {
...
throw ParserException(Fields.B_FIRST_FIELD);
}
}
// Parser error
public class ParserException extends Exception {
enum fieldName; // ????? what goes here?
public ParserException(enum e) {
this.fieldName = e;
}
public enum getFieldName() { // ?????? how do I do something like this?
return fieldName;
}
}
'이것은 Object를 사용하는 것 이상의 진정한 이점을 제공하지 않습니다. -'name()'과'ordinal()'메소드는 정말 편리 할 것입니다. OTOH, 당신은 더 이상 이런 식으로 얻을 수 없습니다. – maaartinus
@maaartinus :'toString()'은'toString()'을 오버라이드하지 않는 한'name()'과 동일하다.'name()'의 Javadoc은'toString()'이 그것보다 우선적으로 사용된다는 것을 암시한다 대부분의 경우에. 'ordinal()'은 일반적인 사용을 목적으로하지 않습니다 ... "정교한 enum 기반 데이터 구조에서 사용하도록 설계되었습니다". – ColinD
나는 동의하지 않는다. "* 대부분의 프로그래머는 toString 메서드를이 메서드보다 우선 사용해야합니다."- 이상하게 들립니다. 'toString()'은 사람에게 사용되어야하지만, 프로그램의 행동은 그것에 의존해서는 안됩니다. 그게'name()'의 목적입니다. 그리고 cdarwin이'ordinal()'으로 정교한 구조를 만들지 누가 알겠는가? 물론, 당신이 할 수있는 일은 많지 않습니다. 특히 당신이 가지고있는 두 열거 형 중 어느 것을 알지 못할 때. – maaartinus