【发布时间】:2017-08-09 13:13:37
【问题描述】:
目前作为练习 SOLID 原则和基本数据结构的练习,我正在尝试实现具有尽可能多的代码重用的链表类型结构。目前,我有:
package structures.linked;
public class SingleNode<T> {
private T data;
private SingleNode<T> next;
public SingleNode(T data, SingleNode<T> next) {
this.data = data;
this.next = next;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public SingleNode<T> getNext() {
return next;
}
public void setNext(SingleNode<T> next) {
this.next = next;
}
}
还有……
package structures.linked;
public class DoubleNode<T> extends SingleNode<T> {
private DoubleNode<T> prev;
public DoubleNode(T data, DoubleNode<T> next, DoubleNode<T> prev) {
super(data, next);
this.prev = prev;
}
public DoubleNode<T> getPrev() {
return prev;
}
public void setPrev(DoubleNode<T> prev) {
this.prev = prev;
}
public DoubleNode<T> getNext() {
return (DoubleNode<T>) super.getNext();
}
public void setNext(DoubleNode<T> next) {
super.setNext(next);
}
}
在我看来,DoubleNode<T> 内部的getNext() 违反了 Liskov 的替换原则。是这样吗?有没有更好的方法来实现这一点,同时仍然重用 SingleNode<T> 中的代码并且不违反 SOLID 原则?
【问题讨论】:
-
嘿马修,我认为像这样的问题更适合codereview.stackexchange.com
-
@Kuba 肯定会在那边发帖,谢谢!
标签: java oop linked-list