2尝试构建MatJuice时出现编译错误(找不到符号和不兼容的类型)

我刚刚找到了这个工具,MatJuice,它可以为我节省几天甚至几周的开发时间,但它不能编译。

尽管我对Java一无所知,但它看起来并不那么复杂:这两个错误都位于同一个文件、同一个函数中,而且函数看起来像是通用的(findParent),所以也许Java程序员马上就会知道它是怎么回事。

一年多前在here上发布了一个突破性的问题,似乎作者不愿意纠正它。这就是我在这里提问的原因。

下面是两个错误:

[javac] /home/geoffrey/mclab-core/languages/Natlab/src/natlab/utils/NodeFinder.java:62: error: cannot find symbol
[javac]         .filter(n -> clazz.isInstance(n) || n.getParent() == null)
[javac]                                              ^
[javac]   symbol:   method getParent()
[javac]   location: variable n of type Object
[javac] /home/geoffrey/mclab-core/languages/Natlab/src/natlab/utils/NodeFinder.java:66: error: incompatible types: Object cannot be converted to T
[javac]         .orElse(null);
[javac]                ^
[javac]   where T is a type-variable:
[javac]     T extends Object declared in method <T>findParent(Class<T>,ASTNode<?>)

Bellow是相关的代码片段(错误发生在此摘录中的第3行和第7行)

public static <T> T findParent(Class<T> clazz, ASTNode<?> node) {
  return Stream.iterate(node, ASTNode::getParent)
      .filter(n -> clazz.isInstance(n) || n.getParent() == null)
      .findFirst()
      .filter(clazz::isInstance)
      .map(clazz::cast)
      .orElse(null);
}

完整的文件是here (文件中有一些有用的注释)以及存储库的其余部分。

我自己也试过,但由于对Java一无所知,它太抽象了,我无法调试。

转载请注明出处:http://www.owntest.net/article/20230526/1643938.html