2017-06-23 7 views
0

J'ai une classe MyClass qui a une méthode getId() avec le type de retour Long. Je l'utilise avec optaplanner. Je crée une fabrique de solveurs à partir d'un fichier de ressources et construis un solveur.Drools prétend que la méthode a été surchargée

SolverFactory solverFactory = SolverFactory.createFromXmlResource("/path/to/config"); 
Solver solve = solverFactory.buildSolver(); 

Lorsque buildSolver() est exécutée, je vois l'avertissement

Getter overloading detected in class mypackage.MyClass : getId (class java.lang.Object) vs getId (class java.lang.Long) 

Je me demande où optaplanner trouve la méthode getId() avec le type de retour d'objets. Ce n'est nulle part dans le code source!

EDIT

Comme indiqué dans les commentaires, l'avertissement peut aussi signifier que Drools a trouvé deux méthodes: getId (Object) et getId (Long). C'est d'autant plus suspect que je n'ai pas défini de méthode getId qui accepte des paramètres.

MISE À JOUR

J'ai étudié la classe https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/util/asm/ClassFieldInspector.java dans la version que j'ai sur ma machine en utilisant la dépendance maven

<dependency> 
    <groupId>org.optaplanner</groupId> 
    <artifactId>optaplanner-benchmark</artifactId> 
    <version>6.4.0.Final</version> 
</dependency> 

Lorsque le ClassFieldInspector est instancié avec classUnderInspection est égal à "mypackage.MyClass" , puis la liste des méthodes

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

do contiennent deux méthodes e fait appelées getId():

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

Je doute que quelqu'un puisse vous aider sans un [mcve]. –

+0

C'est juste une vérification qui est faite par Drools/Optaplanner, mais cela dépend de votre application si cela peut entraîner un problème. L'alerte est générée par cette classe: https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/util/asm/ClassFieldInspector.java –

+1

@Geoffrey De Smet Si l'avertissement signifie qu'il peut y avoir deux méthodes getId avec différents types de retour, il est absolument suspect car il n'y a pas de surcharge pour différents types de retour. – laune

Répondre