找不到适用于实际参数“ int”的适用构造函数/方法,但确实存在匹配的候选对象

时间:2019-03-22 19:06:16

标签: java apache-spark-sql janino

我想在Spark-SQL生成的Java代码中添加一些代码。因此,我创建了一个具有“雇员”类的jar文件,并在文件中手动插入“雇员e =新雇员(某个整数)”:sql / core / src / main / scala / org / apache / spark / sql / execution /WholeStageCodegenExec.scala。 当调用spark-shell时,我做了'spark-shell --jars /path/to/myJar.jar'。但是,当我运行查询时,它报告此错误: 错误CodeGenerator:编译失败:org.codehaus.commons.compiler.CompileException:文件'generated.java',第21行,第18列:找不到适用于实际参数“ int”的适用构造函数/方法;候选人是:“雇员()”,“雇员(int)”,“雇员(java.lang.String)”

我在网上发现的大多数类似问题是因为参数类型不匹配,但是,正如您在此处看到的那样,我确实拥有Employee(int)构造函数,为什么Janino仍对此有所抱怨?

我的员工示例非常简单:

public class Employee {
  String name = "Default";
  int age;
  int ID;

  Employee() {
    System.out.println("Empty constructor");
  }

  Employee(String myName) {
    name = myName;
  }

  Employee(int myAge) {
    age = myAge;
  }

  void sayHi() {
    System.out.println("Hello, I'm " + name);
  }

  void sayhello() {
    System.out.println("Hello,test");
  }
}

修改后的生成代码也很简单:

public void init(int index, scala.collection.Iterator[] inputs) {
  String name = "Go";
  int age = 30;
  Employee e1 = new Employee(age);
  e1.sayHi();

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不熟悉Spark代码生成器,但这是Java代码的一个问题。

Employee类的所有构造函数都用default access进行了修饰,因此无法从其他包中访问它们。尝试使用public修饰符声明构造函数。