Un Objet qui hérite de deux classe et implémente une interface
Tanboula
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Tanboula Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Tanboula Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour, s'il vous plait comment faire pour rendre ce code fonctionnel en java 1.3
ma solution :
mais mon superviseur m'a dit que c'est faut par ce que c'est l'objet qui hérite et pas la classe D.
public class MultipleBounds{
class A { /* ... */ }
interface B { /* ... */ }
interface C { /* ... */ }
class D <T extends A & B & C> { /* ... */ }
}
ma solution :
public class MultipleBounds{
class A { /* ... */ }
interface B { /* ... */ }
interface C { /* ... */ }
class D extends A implements B,C { /* ... */ }
}
mais mon superviseur m'a dit que c'est faut par ce que c'est l'objet qui hérite et pas la classe D.
1 réponse
-
En faisant
class D <T extends A & B & C>
c'est T qui étend A, B, C, mais D ne fait que étendre Object.
Alors qu'en faisantclass D extends A implements B,C
tu as D qui étends de A... et plus embêtant tu n'as plus le paramètre T !
En Java 1.3 (lorsque les types paramétrés n'existaient pas encore) il aurait fallu gérer toi même la classe T, par exemple avec un objet Class comme ceci :
class D { private final Class classT; public D(Class classT) { this.classT = classT; if (classT==null) throw new InvalidParameterException("parameter class can't be null"); if (!classT.isAssignableFrom(A.class)) throw new InvalidParameterException("parameter class must extends "+A.class); if (!classT.isAssignableFrom(B.class)) throw new InvalidParameterException("parameter class must extends "+B.class); if (!classT.isAssignableFrom(C.class)) throw new InvalidParameterException("parameter class must extends "+C.class); } }
Du coup une méthode générique en Java 5+ comme ceci :
private T t; public void set(T t) { this.t = t; }
Devient en Java 1.3 comme cela :
private Object t; public void set(Object t) { this.t = t; if (t!=null && !t.getClass().isAssignableFrom(classT)) throw new InvalidParameterException("parameter must extends "+A.class+" and implements "+B.class+" and "+C.class); }
La confiance n'exclut pas le contrôle