Un Objet qui hérite de deux classe et implémente une interface

Fermé
Tanboula Messages postés 3 Date d'inscription jeudi 23 janvier 2014 Statut Membre Dernière intervention 26 février 2014 - 23 janv. 2014 à 14:08
Tanboula Messages postés 3 Date d'inscription jeudi 23 janvier 2014 Statut Membre Dernière intervention 26 février 2014 - 24 janv. 2014 à 10:14
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.
A voir également:

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 23/01/2014 à 19:33
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
Tanboula Messages postés 3 Date d'inscription jeudi 23 janvier 2014 Statut Membre Dernière intervention 26 février 2014
24 janv. 2014 à 10:14
Merci
0