我目前正在编写一个由Node<T>
对象组成的简单二叉树。
Node<T>
具有以下属性:
private T value = null;
private Node<T> left = null;
private Node<T> right = null;
目前这三个人都有吸气剂和制定者。
我的问题是:
如果我添加一个枚举,指定我想要访问的节点的哪一侧/值,例如:
public static enum Sides {LEFT, RIGHT, VALUE};
是否可以定义通用的getter和setter?
我已经尝试过这样的事情:
public <E> get(Side side) {
switch(side){
case LEFT:
return (E)this.left;
[...]
}
}
这是唯一的方法,还是有更好的方法?
我将如何定义setter?
提前致谢! :)
答案 0 :(得分:0)
如果我不想为每一方都有单独的吸气剂和制定者(实际上我可能会),而且我确实想要可变性(实际上我可能不会),我会做
public enum Sides {LEFT, RIGHT}; // FYI static is redundant for inner enums
public Node<T> get(Side side) {
switch(side) {
...
}
}
public void set(Side side, Node<T> node) {
switch(side) {
...
}
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
答案 1 :(得分:0)
您在运行时决定取决于当前SIDE将返回的类型。泛型在编译时用于类型检查安全性,而不是在运行时。
您有两种选择。