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   -
Bonjour, s'il vous plait comment faire pour rendre ce code fonctionnel en java 1.3

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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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 faisant
    class 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
    1
    1. Tanboula Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci
      0