我有一个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()的方法:
答案 0 :(得分:0)
问题是由MyClass实现声明方法getId的通用接口引起的。我已将此作为单独的问题发布
Implementing generic java interface adds additional method
因为它的一般性质与optaplanner无关。