我必须设计一个数据结构,它会多次实现,并且我遇到了一个问题。Java:受保护的方法在接口之前
由于我的数据结构需要它的多个版本,我创建了一个抽象类,为所有实现奠定了基础。但是,数据结构也需要对某些部分进行设置。
问题变成如下:根据我的数据结构的实现,集合需要有不同的实现: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()方法变为公共,这是不可取的。
- 使SetView只扩展AbstractSetView并且自己实现一切...两次。但是这需要我基本上包含HashSet和SingletonSet实现,作为一个非常难看的内部类。
当然,Java的设计者提出了一些解决方法,使我能够使用它们的内置Set实现?我忽略了什么?
请评论,如果你downvote,这种方式可能都可以学到一些东西。 –