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

Rémi Forax <[email protected]> Mon, 24 Jan 2011 13:44:52 +0100
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
On 01/24/2011 01:05 PM, Dominique Gallot wrote:
> Manque pas juste
> Wrapper<?
> *extends*A> wa = Wrappers./createWrapper/(*new*B());
> Au point 1 ? je pense que ca fait ce que tu veux.

ou

Wrapper<A> wa = Wrappers.<A>createWrapper(new B());

> Dominique

sinon Laurent, ton cast ici sera supprimer par le compilo,
il n'y aura pas de cast à l'exécution.

Rémi

> 2011/1/24 Laurent Forêt <[email protected] 
> <mailto:[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://www.devcoop.fr/>,
>     http://laurentforet.org <http://laurentforet.org/>
>     IvyBeans Creator
>     Membre du JUG Bordeaux
>
>