Java抽象类/接口和指定类型参数

时间:2016-09-28 22:49:50

标签: java inheritance parameters override

现在我实现Tree<T><T>是指根节点的数据值)抽象类,目前有类似这样的内容:

public abstract class Tree<T> {
    public void setChild(int index, ??? childTree);
    public void deleteChild(int index, ??? childTree);
    public T getData();
    public void setData(T value);
}

正如您所看到的,我无法确定儿童树的正确类型。理想情况下,我会做这样的事情

public abstract class Tree<T> {
    public void setChild(int index, ImplementingClass childTree);
    public void deleteChild(int index, ImplementingClass childTree);
    ...
}  

但我不知道该怎么做(可能会重读文档)。我想到的当前解决方案是这样的

public abstract class Tree<T, C extends Tree> {
    public void setChild(int index, C childTree);
    public void deleteChild(int index, C childTree);
    ...
}

但更正确的解决方案是指定子树必须与当前树相同。有没有办法在Java中指定它?

1 个答案:

答案 0 :(得分:-1)

Tree<T>

将包含T

类型的对象
Tree<String> tree;

T可以是另一种通用类型描述

Tree<Tree<String>>

然后从中添加或删除T对象

Public void setChild(int index, T child);
public void deleteChild(int index, T child);

如果要将T指定为限制性更强的类型

<T extends class>
<T implements interface>
<T super class>

在第一个示例中,如果您没有方法实现,请将抽象类更改为接口。

请记住,一个类只能继承一次,但可以实现多个接口