2016-09-28 104 views
0

现在我实现Tree<T><T>指根节点的数据值)抽象类,目前有这样的事情:的Java抽象类/接口和指定类型参数

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中指定它?

+0

什么是'T' ???? – sidgate

+0

Java中没有自我类型。你心目中的内容大多是正确的。它应该是'Tree >'。 – shmosel

+0

它真的必须是相同的实现吗?没有'Tree '作为一个足够好的参数? –

回答

-1
Tree<T> 

将包含T类型的对象

Tree<String> tree; 

牛逼可能是另一种通用的类型描述

Tree<Tree<String>> 

然后添加或从中

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

删除T对象如果你想指定T到更具限制性的类型

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

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

记住,一个类只能从其他的一次继承,但可以实现多个接口

+0

啊,我想保留泛型类型'T'来引用根节点的数据值。将数据值本身作为子树会让人困惑,因为我们已经有了一个子树的列表/集合。 – Rdesmond

+0

确定那么你是正确的与树子树具有相同的根类型?也许Tree > – Tokazio