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 >