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

Dominique Gallot <[email protected]> Mon, 24 Jan 2011 13:05:42 +0100
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
Manque pas juste

Wrapper<?
*extends* A> wa = Wrappers.*createWrapper*(*new* B());
Au point 1 ? je pense que ca fait ce que tu veux.

Dominique

2011/1/24 Laurent Forêt <[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
>