我有一个类MyClass,它有一个方法getId(),返回类型为Long。我把它和光学规划师一起用了。我从资源文件创建了一个解决工厂,并构建了一个解决程序。
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在哪里找到带有返回类型对象的方法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等于"mypackage.MyClass“时,那么方法列表
final List<Method> methods = Arrays.asList( clazz.getMethods() );
确实包含两个名为getId()的方法:
发布于 2017-06-26 05:33:35
造成这个问题的原因是MyClass实现了一个声明方法getId的通用接口。我已经把这作为一个单独的问题发布了
Implementing generic java interface adds additional method
因为它的一般性质,与光学规划师无关。
https://stackoverflow.com/questions/44723889
复制