<Swing Dev> [PATCH] 6179357: Generics: JList

Pavel Porvatov Pavel.Porvatov at Sun.COM
Thu May 14 12:52:49 UTC 2009


Hi Florian,

> 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());
>    }
Ok, that code actually prevents to use generics in the 
DefaultListCellRender class.

Thanks, Pavel

> 
> 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?
>>>>>>
>>>>>
>>>>
>>>
>>
> 




More information about the swing-dev mailing list