This is what you could do:

import java.util.Locale;

public class Test {
   public <L> IConverter<L> getConverter(Class<L> type) {
      return null;
   }
}

class InnerTest extends Test {
   public <K> IConverter<K> getConverter(Class<K> type) {
      if (Integer.class.isAssignableFrom(type)) {
         return (IConverter<K>) new IConverter<Integer>() {
            public Integer convertToObject(String value, Locale locale) {
               return null;
            }
            public String convertToString(Integer value, Locale locale) {
               return null;
            }
         };
      } else {
         return super.getConverter(type);
      }
   }

   public void foo() {
      IConverter<Integer> converter = getConverter(Integer.class);
   }
}

interface IConverter<X> {
   public X convertToObject(String value, Locale locale);
   public String convertToString(Integer value, Locale locale);
}

But, you are obligated to use a hard cast inside of getConverter either way.

Regards

On Tue, Apr 15, 2008 at 4:04 PM, Igor Vaynberg <[EMAIL PROTECTED]>
wrote:

> Type mismatch: cannot convert from new IConverter<Integer>(){} to
> IConverter<Z>
>
> i can hard cast to IConverter<Z> myself, but then there is very little
> point to having it generified
>
> -igor
>
>
> On Tue, Apr 15, 2008 at 11:59 AM, Bruno Borges <[EMAIL PROTECTED]>
> wrote:
> > What is the compile error message?
> >
> >  On Tue, Apr 15, 2008 at 3:10 PM, Igor Vaynberg <[EMAIL PROTECTED]
> >
> >
> >
> > wrote:
> >
> >  > maybe just IConverter<?> getConverter(Class<?> cl)
> >  >
> >  > -igor
> >  >
> >  >
> >  > On Tue, Apr 15, 2008 at 11:05 AM, Igor Vaynberg <
> [EMAIL PROTECTED]>
> >  > wrote:
> >  > > example below doesnt compile, so im not exactly sure how to
> override
> >  > >  generified getconverter() properly ... do we need to change our
> >  > >  generics decl somehow?
> >  > >
> >  > >  -igor
> >  > >
> >  > >      @Override
> >  > >         public <Z> IConverter<Z> getConverter(Class<Z> type)
> >  > >         {
> >  > >                 if (Integer.class.isAssignableFrom(type))
> >  > >                 {
> >  > >                         return new IConverter<Integer>()
> >  > >                         {
> >  > >                                 private static final long
> >  > serialVersionUID = 1L;
> >  > >
> >  > >                                 public Integer
> convertToObject(String
> >  > value, Locale locale)
> >  > >                                 {
> >  > >                                         return null;
> >  > >                                 }
> >  > >
> >  > >                                 public String
> convertToString(Integer
> >  > value, Locale locale)
> >  > >                                 {
> >  > >                                         return null;
> >  > >                                 }
> >  > >
> >  > >                         };
> >  > >                 }
> >  > >                 else
> >  > >                 {
> >  > >                         return super.getConverter(type);
> >  > >                 }
> >  > >         }
> >  > >
> >  >
> >
> >
> >
> >  --
> >  Bruno Borges
> >  blog.brunoborges.com.br
> >  +55 1185657739
> >
> >  "The glory of great men should always be
> >  measured by the means they have used to
> >  acquire it."
> >  - Francois de La Rochefoucauld
> >
>



-- 
Bruno Borges
blog.brunoborges.com.br
+55 1185657739

"The glory of great men should always be
measured by the means they have used to
acquire it."
- Francois de La Rochefoucauld

Reply via email to