【问题标题】:Generic Binary Tree Java通用二叉树 Java
【发布时间】:2017-12-19 05:26:34
【问题描述】:

我的任务是用 Java 编写一个通用的二叉树,类 Node 和 Tree 以及 NodeActionInterface

public interface NodeActionInterface {
public void action(); }

这是我的节点:

public class Node <T> implements NodeActionInterface {

<T> data;
Node leftTree;
Node rightTree;

public <T> Node(<T> data){
   this.data = data;
}
 @Override
    public void action() {

    }

但存在诸如“预期标识符”之类的错误和其他一些错误。 有人可以帮助我吗?

【问题讨论】:

  • 您能否分享实际错误(例如,包括行号),而不是错误的“样子”?
  • &lt;T&gt; data -> T data.
  • 在“数据;”行有错误:预期标识符,意外令牌,无法解析符号“数据”
  • @saka1029,谢谢,我更正了!现在this.data = data行仍然有错误:不兼容的类型:必需的T,找到的T
  • 请阅读minimal reproducible example。然后了解:SO 不是免费的辅导服务,人们会花时间指导您解决遇到的所有语法错误。转储代码,然后要求人们在下一个问题后解决一个问题是赞赏。我的提示:不要写 50 行代码来然后运行编译器。只写几行代码(足以让你有一些你认为“这应该编译”的有意义的东西)。然后运行编译器。解决问题。再写5行。等等。

标签: java generics interface


【解决方案1】:

嗯,有不少语法错误:

public class Node <T> implements NodeActionInterface
{
    // <T> data;
    T data;
//  ^ T is the data type...

    Node<T> leftTree;
    Node<T> rightTree;
//      ^  not really an errror, but you should use the generic here

    //public <T> Node(<T> data)
    public Node(T data)
//        ^ declared another T hiding the "outer" T
//              ^ again: data type is T
    {
        this.data = data;
    }
}

【讨论】:

  • “构造函数没有返回类型”public &lt;T&gt; Node(T data) 不是声明返回类型,而是声明类型变量。
  • 我不明白你的意思。我要说的是there is nothing wrong with declaring a type variable on a constructor。您不应该在此代码中(至少,如果您将其称为 T,则不会),因为它隐藏了类级别 T,因此您将无法分配 @987654327 @;只是你给它不存在的原因是不正确的。
  • @AndyTurner 好吧,好像我已经离开 Java 太久了,以前没见过这个结构。工作正常,如果我们有 &lt;TT&gt; 代替。你能给我提供任何参考资料,以便我适当地修正我的答案吗?
  • 您的答案现在看起来不错;但你可以在语言规范中看到关于构造函数的类型变量:docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8
  • @AndyTurner 谢谢。真的很有趣——而且我现在肯定已经离开 Java 一段时间了......
【解决方案2】:

实际上,您提供的信息并不多。可以试试这个会得到一个线索。这是给定代码的语法更正。

public class Node <T> implements NodeActionInterface  {

T data;
Node leftTree;
Node rightTree;

public T Node(T data){        
    this.data = data;
    return data;
}

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多