2015-07-15 16 views
7

Ho una classe generica con questa definizione:generici Java: mancata corrispondenza Bound

public class AcoProblemSolver<C, E extends Environment, A extends AntColony<E, Ant<C, E>>> { 

Dove AntColony va in questo modo:

public abstract class AntColony<E extends Environment, A extends Ant<?, E>> { 

E Ant va come questa:

public abstract class Ant<C, E extends Environment> { 

Speravo di estendere AntColony in questo modo:

public class FlowShopProblemSolver extends 
    AcoProblemSolver<Integer, FlowShopEnvironment, FlowShopAntColony> { 

Ma Eclipse sta mostrando un errore sulla classe FlowShopAntColony parametri:

Bound mismatch: The type FlowShopAntColony is not a valid substitute for the bounded parameter <A extends AntColony<E,Ant<C,E>>> of the type AcoProblemSolver<C,E,A> 

Il che mi confonde, perché FlowShopAntColony si definisce in questo modo:

public class FlowShopAntColony extends 
    AntColony<FlowShopEnvironment, AntForFlowShop> { 

E AntForFlowShop va in questo modo:

public class AntForFlowShop extends Ant<Integer, FlowShopEnvironment> { 

Perché il parametro FlowShopAntColony non è accettato come parametro valido?

risposta

8
A extends AntColony<E, Ant<C, E>> 

Il terzo parametro del AcoProblemSolver ha la limitazione extends AntColony<E, Ant<C, E>>. Il secondo parametro di AntColony deve essere esattamenteAnt<C, E> e si sta tentando di passare una sottoclasse di Ant. Prova:

A extends AntColony<E, ? extends Ant<C, E>> 

si consiglia di altri simili ? extends clausole altrove.

Problemi correlati