Drools 声称该方法已超载
Drools claims that method was overloaded
我有一个 class MyClass,它有一个 return 类型为 Long 的方法 getId()。我将它与 optaplanner 一起使用。我从资源文件创建求解器工厂并构建求解器。
SolverFactory solverFactory = SolverFactory.createFromXmlResource("/path/to/config");
Solver solve = solverFactory.buildSolver();
执行 buildSolver() 时,我看到警告
Getter overloading detected in class mypackage.MyClass : getId (class java.lang.Object) vs getId (class java.lang.Long)
我想知道 optaplanner 在哪里找到 return 类型对象的方法 getId()。它在源代码中无处可去!
编辑
正如评论中所指出的,警告也可能意味着 drools 找到了两个方法:getId(Object) 和 getId(Long)。这更值得怀疑,因为我没有定义带任何参数的 getId 方法。
更新
我已经使用 Maven 依赖项
调查了我机器上的版本中的 class https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/util/asm/ClassFieldInspector.java
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
<version>6.4.0.Final</version>
</dependency>
当使用 classUnderInspection 实例化 ClassFieldInspector 时等于 "mypackage.MyClass",则方法列表
final List<Method> methods = Arrays.asList( clazz.getMethods() );
确实包含两个名为 getId() 的方法:
- "public java.lang.Long mypackage.myClass.getId()"
- "public java.lang.Object mypackage.myClass.getId()"
问题是由于 MyClass 实现了一个通用接口,该接口声明了方法 getId。我已将其作为一个单独的问题发布
因为它的一般性质与 optaplanner 无关。
我有一个 class MyClass,它有一个 return 类型为 Long 的方法 getId()。我将它与 optaplanner 一起使用。我从资源文件创建求解器工厂并构建求解器。
SolverFactory solverFactory = SolverFactory.createFromXmlResource("/path/to/config");
Solver solve = solverFactory.buildSolver();
执行 buildSolver() 时,我看到警告
Getter overloading detected in class mypackage.MyClass : getId (class java.lang.Object) vs getId (class java.lang.Long)
我想知道 optaplanner 在哪里找到 return 类型对象的方法 getId()。它在源代码中无处可去!
编辑
正如评论中所指出的,警告也可能意味着 drools 找到了两个方法:getId(Object) 和 getId(Long)。这更值得怀疑,因为我没有定义带任何参数的 getId 方法。
更新
我已经使用 Maven 依赖项
调查了我机器上的版本中的 class https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/util/asm/ClassFieldInspector.java<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
<version>6.4.0.Final</version>
</dependency>
当使用 classUnderInspection 实例化 ClassFieldInspector 时等于 "mypackage.MyClass",则方法列表
final List<Method> methods = Arrays.asList( clazz.getMethods() );
确实包含两个名为 getId() 的方法:
- "public java.lang.Long mypackage.myClass.getId()"
- "public java.lang.Object mypackage.myClass.getId()"
问题是由于 MyClass 实现了一个通用接口,该接口声明了方法 getId。我已将其作为一个单独的问题发布
因为它的一般性质与 optaplanner 无关。