[GENERIC] problème que je n'arrive pas à résoudre . P... de Generic :)

Laurent Forêt <[email protected]> Mon, 24 Jan 2011 11:35:49 +0100
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
Bonjour,

  Comme c'est lundi et que je suis sympa, j'ai un petit casse tête sur les
génériques à vous proposer :

Soit le code suivant :

public class TestCreateWrapper {

    @Test
    public void test() {
        *// POINT1*
        Wrapper<A> wa = Wrappers.createWrapper(new B());
    }

    public static class A {}

    public static class B extends A {}

    public static class Wrapper<T> {
        private T t;
        public Wrapper(T t) {
            this.t = t;
        }
    }

    public static class Wrappers {
        *//POINT2*
        public static <TODO> createWrapper(T t) {
            throw new UnsupportedOperationException("TODO");
        }
    }
}

au POINT 2 je code rapidement ça :

 public static <T> Wrapper<T> createWrapper(T t) {
     return new Wrapper<T>(t);
 }

problème au POINT1 , je dois faire un cast (comme quand j'utilise des
collections) :  Wrapper<A> wa = Wrappers.createWrapper(*(A)*new B());

Or ce cast, il me parait complètement inutile à l'usage et donc je dois me
gourer quelque et part donc pour la réécriture de mon POINT2 :

public static <T, S extends T> Wrapper<T> createWrapper(S s) {
    return new Wrapper<T>((T)s);
}

La Netbeans ne gueule plus et ne m'oblige pas à mettre ce cast Eclipse non
plus d'ailleurs, alors je me dis cool, j'ai la solution au problème et je me
dis que les génériques c'est quand même compliqué.

Mais le pire c'est après que je lance mon test via mon super outil Maven, y
a le compilo, le même que celui utiliser par Netbeans (Eclipse j'aurai pu
comprendre il compile pas avec le même) qui m'injure :

[ERROR]TestCreateWrapper.java:[14,46] incompatible types
found   : TestCreateWrapper.Wrapper<TestCreateWrapper.B>
required: TestCreateWrapper.Wrapper<TestCreateWrapper.A>


Alors là je me dis c'est ch... les generiques.

Mais comme je suis sur de trouver quelqu'un super balèze sur les génériques
sur cette liste et qui va m'écrire :"RTFM, la JLS à la ligne untel te dit
que tu n'as qu'à faire comme ça." Déçu de ne pas avoir trouvé tout seul mais
content d'avoir ma soluce je repars dans mon taffe.

Any help will be appreciated !

Laurent Forêt
http://www.devcoop.fr,
http://laurentforet.org
IvyBeans Creator
Membre du JUG Bordeaux