未找到适用于实际参数 "int" 的 constructor/method,但匹配的候选对象确实存在
No applicable constructor/method found for actual parameters "int" but the matching candidate does exist
我想在 Spark-SQL 生成的 java 代码中添加一些代码。因此,我创建了一个包含 class "Employee" 的 jar 文件,并在文件中手动插入 'Employee e = new Employee(some integer)':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" 的 constructor/method;候选人是:"Employee()"、"Employee(int)"、"Employee(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();
非常感谢您的帮助!!!
我不熟悉 Spark codegen,但这是 Java 代码的一个问题。
Employee class 的所有构造函数都使用 default access 声明,因此无法从其他包访问它们。尝试使用 public
修饰符声明构造函数。
我想在 Spark-SQL 生成的 java 代码中添加一些代码。因此,我创建了一个包含 class "Employee" 的 jar 文件,并在文件中手动插入 'Employee e = new Employee(some integer)':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" 的 constructor/method;候选人是:"Employee()"、"Employee(int)"、"Employee(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();
非常感谢您的帮助!!!
我不熟悉 Spark codegen,但这是 Java 代码的一个问题。
Employee class 的所有构造函数都使用 default access 声明,因此无法从其他包访问它们。尝试使用 public
修饰符声明构造函数。