C# 및 C++의 일부 프로젝트 이후에 Java로 작업하기 시작했습니다. 방문자 구현을위한 유형 삭제 문제를 극복하는 방법
나는이 같은 방문자 인터페이스를 설계하고 싶었 :public interface ActionVisitor<A> {
void visitAction(A action);
}
public interface MySmallActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>
{
}
public interface MyFullActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>,ActionVisitor<ActionC>,ActionVisitor<ActionD> //....
{
}
물론이 때문에 형의 삭제 작동하지 않습니다. (나는 이런 식으로 뭔가를 원하는 이유는 내가 방문 할 수있는 작업의 다른 그룹에 대해 서로 다른 방문자 인터페이스를 가질 것입니다.) 내 마음에 오는 유일한 해결책
는 인터페이스
public interface ActionAVisitor {
void visitAction(ActionA action);
}
public interface ActionBVisitor {
void visitAction(ActionB action);
}
//...
을 선언하는 것입니다
다음
public interface MySmallActionVisitor
extends ActionAVisitor, ActionBVisitor
{
}
이 작동 것입니다,하지만 난 바보 반복 및 파일 많이있는 모든 ActionXVisitor - 인터페이스의 선언을 좋아하지 않을 ...
더 나은 방법에 대한 아이디어가 있습니까?
고맙습니다.
"instanceof"를 사용 하시겠습니까? 이것이 방문자 패턴이 피하고 싶어하는 것입니다. 또한, 모든 방문자 (MySmallVisitor, MyFullVisitor 및 기타)의 블록 인 경우이 코드를 작성해야합니다. – Philipp
예, 저는 instanceof를 의미했습니다. 이를 피하려고하면 결국 더 많은 코드로 이어질 것입니다. –
실제로 문제를 극복 할 수있는 방법이 없다면 instanceof 코드보다 코드가 더 많을 것입니다 ... 불쌍한 언어 :-( – Philipp