여러 장소에서 오류 메시지와 성공 메시지를 생성 할 수있는 프로세스가 있으므로 한 클래스로 모두 추적 한 다음 프로세스가 끝나면 여러 가지 '유형'별로 메시지를 그룹화합니다. 이 라인을 따라 뭔가 :제네릭을 사용하여 instanceof를 피할 수있는 방법이 있습니까?
public class Message {
String message;
public Message(String message) {
this.message = message;
}
}
public class ErrorMessage extends Message {};
public class FileErrorMessage extends ErrorMessage {};
public class OkMessage extends Message {};
등등. (명확성을 위해 파생 클래스에서 생성자를 건너 뜁니다.) 나는 instanceof 연산자, 그러나을 사용하여 List 중에서 차별화 할 수 있습니다. 제네릭이 더 우아 할 것이라고 생각하지만, 어떻게 목록에서 차별화 할 수 있습니까?
Message<ErrorMessage> eMsg = new Message<ErrorMessage>("invalid user");
Message<FileErrorMessage> feMsg = new Message<FileErrorMessage>("file not found");
내가 사용하는 열거
다른 클래스에 대한
enum MessagType { ERROR, FILE_ERROR, OK }
생각하지만, 나는 해결책을 마련 할 수 없었다. 감사.
그들과 차별 * * *? 알 수없는 일들을하는 것처럼 일반적인 솔루션을 찾고 있다면 [방문자 패턴] (https://en.wikipedia.org/wiki/Visitor_pattern)을 사용해야합니다. 선험적으로 알려진 일을 구체적으로하고 싶다면 다형성을 사용할 수 있습니다. –
"다른 클래스에서 열거 형 [...] 사용을 고려했습니다."열거 형 필드가있는 단일 클래스를 사용할 수 있습니다. 'Message'는'MessageType getType()'과'String getMessage()'와 같은 메소드를 제공 할 수 있습니다. – Izruo
글쎄, 나는 하나의리스트에 그것들을 모두 추가하고 싶다. 그래서 미래에 정의 된 에러를리스트에 추가 할 수있다. 자바 예외 클래스가 내가 설명한 패턴을 따르는 것처럼 보입니다. 과정이 끝나면 한 곳으로 ErrorMessages를 보내고 다른 사람에게 OkMessages를 보내고 싶습니다. – bretter