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

时间:2017-12-27 13:17:06

标签: rascal

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

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

Rascal代码:

@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插件。

1 个答案:

答案 0 :(得分: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>