Est-il possible d'éviter le fouillis d'ajouter tous les types à la définition de classe lors de l'implémentation d'une interface comme celle-ci?Implémenter des méthodes génériques à partir d'une interface sans fouillis?
MyInterface.java
import java.util.List;
abstract class BaseA {}
abstract class BaseB {}
abstract class BaseC {}
interface MyInterface<T extends BaseA, U extends BaseB, V extends BaseC> {
public void foo(List<? extends T> list);
public void bar(List<? extends U> list);
public void baz(List<? extends V> list);
}
MyImplementation.java
/* Some concrete implementations of the abstract classes used in the interface */
class A extends BaseA{}
class B extends BaseB{}
class C extends BaseC{}
class MyImplementation implements MyInterface<A,B,C> {
public void foo(List<? extends A> list){}
public void bar(List<? extends B> list){}
public void baz(List<? extends C> list){}
}
Ce que je n'aime pas à ce sujet est ce genre de choses que je trouve être méthode spécifique, tel que le type de paramètres, est mélangé avec la déclaration de classe. Comme dans ce cas, où je pour chaque méthode générique dans l'interface doit ajouter un type formel dans "la section de support". Y a-t-il une autre façon de réaliser ce qui précède (forçant un appelant de l'implémentation à utiliser une sous-classe spécifique de la classe de paramètres dans l'interface) sans tout le "fouillis"?
Je ne suis pas trop dans les génériques, et le code ci-dessus est fondamentalement basé sur une réponse à cette question.
Si quelqu'un se demande à quoi sert une construction comme cela pourrait avoir, il est conseillé de consulter la dernière réponse ici: http://stackoverflow.com/questions/239645/overriding -a-method-with-generic-parameters-in-java Le code ci-dessus fonctionne comme prévu, je voulais juste voir s'il y a un autre moyen d'y parvenir sans toute la syntaxe supplémentaire. – oligofren