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() 的方法:

  1. "public java.lang.Long mypackage.myClass.getId()"
  2. "public java.lang.Object mypackage.myClass.getId()"

问题是由于 MyClass 实现了一个通用接口,该接口声明了方法 getId。我已将其作为一个单独的问题发布

因为它的一般性质与 optaplanner 无关。