2016-08-12 1 views
-1

En supposant que IUncle est une interface implémentée par Uncle. Assumer que je ne vais pas utiliser des classes concrètes dans la classe Enfant parce que je veux que Child soit utilisé avec n'importe quelle implémentation d'Iuncle. Comment puis-je changer l'implémentation de Child (ci-dessous) de la manière qui fonctionnera pour n'importe quelle implémentation d'Oncle.Ajout d'éléments à un attribut dont le type est une collection java générique

public class Child { 

private List<IUncle> uncles; 

public Child(List<IUncle> uncles){ 
    this.uncles = uncles; 
} 

public void addUncle(IUncle uncle) { 
    this.uncles.add(uncle); 
} 

} 

Dans la classe principale, j'utiliser cette classe comme ceci:

List<Uncle> uncles = new ArrayList<Uncle>(); 
Child oneChild = new Child(uncles); 
oneChild.addUncle(new Uncle); 

C'est ne fonctionne pas du tout !!!

S'il vous plaît, quelqu'un peut-il donner la bonne façon de gérer cette situation dans Java?

+0

'Liste ' et Liste 'sont incompatibles. Ils ne stockent pas la même chose. – Andreas

+0

Qu'est-ce que 'Oncle' et qu'est-ce que' IUncle'? – user1803551

+0

IUncle est en fait une interface et oncle est une classe implémentant cette interface. Et oui, je sais que la liste et la liste sont incompatibles. La question est comment gérer tourner cette classe de la manière qui respecte le "O" du principe SOLID en n'utilisant pas la classe concrète dans une implémentation. – mokolop

Répondre

0

Vous avez une erreur de syntaxe, je ne suis pas sûr de ce que votre classe Uncle ressemble, mais essayez

oneChild.addUncle(new Uncle()); 

Vous avez spécifié une méthode pour ajouter un Uncle, mais vous ne l'utilisez pas.

Aussi, je pense que vous confondez votre interface IUncle (??) avec votre objet Uncle. Ils ne sont pas la même chose et ne sont pas interchangeables.

+1

Puisque vous voulez répondre à propos des erreurs de compilation, voulez-vous développer votre réponse pour expliquer pourquoi 'List ' et 'List ' sont incompatibles, c'est-à-dire pourquoi 'new Child (oncles)' ne compilera pas, même si ' Oncle implémente IUncle'? – Andreas

+0

@Andreas Je ne sais pas comment expliquer cela car je ne suis pas sûr de ce qu'est 'IUncle' - probablement une interface, mais je ne suis pas sûr. –

+0

IUncle est une interface et, oncle implémenter cette interface. – mokolop

0

Un de mon manager dans mon précédent est venu avec une réponse. C'était assez simple!

En fait, il n'y a rien de mal dans la classe enfant. Le problème est dans la classe principale. Lequel, devrait ressembler à ceci:

List<IUncle> uncles = new ArrayList<IUncle>(); 
Child oneChild = new Child(uncles); 
oneChild.addUncle(new Uncle); 

Merci!