我刚刚找到这个工具,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<?>)
波纹管是相关的代码段(错误发生在本摘录的第 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 的了解为零,它对我来说太抽象了,无法调试。
最佳答案
这些错误的出现是因为编译器不知道ast.ASTNode
是什么。项目中没有这样的类。但是 ant 构建文件中有 Natlab.gen
目标:
mclab-core/languages/Natlab/build.xml
尝试运行Natlab.gen
目标,目录gen
(包含必要的包ast.ASTNode
)将在内生成>Natlab
目录。这应该可以修复编译错误。
关于java - 当我尝试构建 MatJuice 时出现 2 个编译错误(找不到符号和不兼容的类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54991781/