通用Java函数 - 返回通用值

时间:2016-01-26 21:16:35

标签: java generics java-8 binary-tree

我目前正在编写一个由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?

提前致谢! :)

2 个答案:

答案 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将返回的类型。泛型在编译时用于类型检查安全性,而不是在运行时。

您有两种选择。

  • 使用对象(无泛型)
  • 如果要使用泛型,请创建一个可以保存Node和非Node类型的holder对象。并返回通用持有者对象。