Drools声称方法过载

时间:2017-06-23 14:29:15

标签: java drools optaplanner

我有一个MyClass类,它有一个返回类型为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在哪里找到返回类型为Object的方法getId()。源代码中没有任何地方!

修改

正如评论中所指出的,警告也可能意味着,drools找到了两种方法:getId(Object)和getId(Long)。这更加可疑,因为我没有定义带有任何参数的getId方法。

更新

我已经使用maven依赖关系在我的机器上的版本中调查了类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>

当ClassFieldInspector与classUnderInspection equals&#34; mypackage.MyClass&#34;进行实例化时,那么方法列表

final List<Method> methods = Arrays.asList( clazz.getMethods() );

确实包含两个名为getId()的方法:

  1. &#34; public java.lang.Long mypackage.myClass.getId()&#34;
  2. &#34; public java.lang.Object mypackage.myClass.getId()&#34;

1 个答案:

答案 0 :(得分:0)

问题是由MyClass实现声明方法getId的通用接口引起的。我已将此作为单独的问题发布

Implementing generic java interface adds additional method

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