여러 번 구현할 데이터 구조를 디자인해야하는데 문제가 발생했습니다.Java : Protected Method Before Interface
내 데이터 구조에 여러 버전이 있어야하므로 모든 구현에 대한 기본 지식을 제공하는 추상 클래스를 만들었습니다. 그러나 데이터 구조에는 특정 부분의 설정보기가 필요합니다.
다음과 같이 문제가 발생합니다. 내 데이터 구조의 구현에 따라 세트가 서로 다른 구현을 필요로합니다. HashSet 또는 Collections.SingletonSet입니다. 그러면 두 개의 구현 데이터 구조가 항목을 추가 또는 제거 할 때 추가 작업을 수행하기 위해이 비트를 확장합니다. 그러나 추상 데이터 구조에는이 추가 작업이 수행되지 않도록이 집합에서 요소를 내부적으로 제거하는 방법이 필요합니다. 이를 위해 보호 된 메소드를 세트에 추가하고 싶습니다. 그러나 그렇게 할 수는 없습니다!
는 설명하기
, 여기에 내가 만드는거야 자료 구조의 유형에 관한 몇 가지 예제 코드입니다 :public abstract class AbstractEdge {
public abstract AbstractSetView destination(); //Gives a subclass of AbstractSetView in implementations.
public void doStuff() {
destination().removeInternal(foo);
}
public abstract class AbstractSetView implements Set<Vertex> {
protected abstract void removeInternal(Vertex vert);
}
}
public class Edge extends AbstractEdge {
public SetView destination() {
return new SetView();
}
public class SetView extends AbstractSetView,Collections.SingletonSet<Vertex> { //Doesn't work this way.
protected void removeInternal(Vertex vert) {
//Do stuff.
}
}
}
public class HyperEdge extends AbstractEdge {
public SetView destination() {
return new SetView();
}
public class SetView extends AbstractSetView,HashSet<Vertex> { //Doesn't work this way.
protected void removeInternal(Vertex vert) {
//Do stuff.
}
}
}
이 내가 생각했던 옵션입니다
- 위와 같이 여러에서 연장은 수업은 허용되지 않습니다.
- AbstractSetView를 인터페이스로 만들면 removeInternal() 메서드가 public이되므로 바람직하지 않습니다.
- SetView는 AbstractSetView 만 확장하고 모든 것을 직접 구현합니다 ... 두 번. 그러나 이것은 기본적으로 HashSet 및 SingletonSet 구현을 내부 클래스로 포함해야하는데, 이는 매우 추악합니다.
분명히 Java 설계자가 내장 된 Set 구현을 사용할 수있게하려면이 방법을 사용 했습니까? 나는 무엇을 간과하고 있는가?
downvote 경우이 방법은 아마도 둘 다 뭔가를 배울 수 있습니다. –