尝试从Rascal调用Java方法时出现IValueFactory错误

问题描述 投票:1回答:1

这个问题类似于this one。我试图从Rascal调用Java方法,但我收到一个错误(这次是另一个错误):

Cannot link method com.mypackage.Teste because: com.mypackage.Teste.<init>(io.usethesource.vallang.IValueFactory)

捣蛋鬼代码:

@javaClass{com.mypackage.Teste}
java void testeJava();

Java代码:

package com.mypackage;

import io.usethesource.vallang.IValueFactory;

public class Teste {
    private final IValueFactory vf;

    public Teste(IValueFactory vf) {
       this.vf = vf;
    }
    public void testeJava() {
        System.out.println("it worked");
    }
}

我注意到我正在使用旧的Rascal版本(0.8),正如this评论中指出的那样。我将其更改为0.9,但错误仍然存​​在。我正在使用Eclipse Rascal插件。

rascal
1个回答
4
投票

因此,总结一下讨论,这个错误的可能原因包括:

  1. 您的Java类需要一个带有IValueFactory参数的公共构造函数,如the other question中所示。例如,public ClassName(IValueFactory vf) { this.vf = vf; }
  2. 你已经添加了(1),并且已经重新编译了Java类,但是Rascal没有重新加载它 - 在这种情况下,解决方案是(现在)关闭Rascal控制台并重新打开它。我不确定Rascal是否打算检查类文件更改。
  3. 你有(1)和Rascal重新加载类,但类文件没有被重新编译,这似乎是在这种情况下的问题。
  4. 正如jurgenv所提到的,您的Eclipse项目还需要Rascal和Java性质,否则Java构建器不会运行。只要您使用New→Rascal Project创建它,就应该从一开始就正确设置。作为参考,Eclipse .project文件的natures部分应如下所示: <natures> <nature>rascal_eclipse.rascal_nature</nature> <nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.pde.PluginNature</nature> <nature>rascal_eclipse.term_nature</nature> </natures>
© www.soinside.com 2019 - 2024. All rights reserved.