Hi Pavel,

I don't understand, what exactly you want to do. DefaultListCellRender implements ListCellRenderer<Object>, which means it is an implementation, which can be savely (without risking a ClassCastException) be used with ANY object. That is due the fact, that it checks if it is an instance of Icon or else calls Object.toString, which is defined for any Object:

if (value instanceof Icon) {
       setIcon((Icon)value);
       setText("");
   }
   else {
       setIcon(null);
       setText((value == null) ? "" : value.toString());
   }

There is no gain in calling eg.:
new DefaultListCellRender<Foo>()

because the existing implementation (DefaultListCellRender implements ListCellRenderer<Object>) already handles Foo.

The only limitation is with sub-classing: Subclasses cannot change the parameter type.
But this can be solved with using composition instead of inheritance, eg:

public class FooRenderer implements ListCellRenderer<Foo>{
private DefaultListCellRender defaultRenderer = new DefaultListCellRender();

public Component getListCellRendererComponent(
       JList<? extends Foo> list,
       Foo value,
       int index,
       boolean isSelected,
       boolean cellHasFocus)
   {
       doSomethingWithFoo(foo);
return defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
   }

 private void doSomethingWithFoo(Foo foo){
     // do something
 }
}

So, I think the answer is yes, it could be changed, but I see no real benefit and more, client code needs then to specify a parameter, which currently it doesn't.

-Florian

Pavel Porvatov schrieb:
Hi Florian,

I have a question about the DefaultListCellRenderer class. Can we modify it to use generics?

Thanks, Pavel

Hi Pavel, hi Alexander,

I'm back from holiday.

What is the status of this patch? Any news?

-Florian

Alexander Potochkin schrieb:
Hello Florian

Great! :-)

In the case of other issues please note that I'm on holiday until the end of next week.

Have a nice holiday!

(I am reviewing the fix right now)

Thanks
alexp


-Florian

Pavel Porvatov schrieb:
Hi Florian,

Hi Pavel,

I agree that we should avoid to mix several different fixes in one fix, but since in this fix we change

AbstractListModel to AbstractListModel<E>
and
JList(ListModel dataModel) to JList(ListModel<E> dataModel)

I think we should also change usages of AbstractListModel such as "this (new AbstractListModel()...)" to "this (new AbstractListModel<E>()...)" to avoid warnings.
Ok, then it will not be a problem. Let's include this change in your fix. Therefore all my comments are gone and I'm going to start our internal process to commit your fix.

Thanks, Pavel.


If you don't agree:
There are several places where I changed the usage of now generified classes to the generic variant. Which ones should I change back? Only this case?






Reply via email to