<Swing Dev> 6179357: Generics: JList: getSelectedValues
Pavel Porvatov
Pavel.Porvatov at Sun.COM
Tue Feb 3 15:57:04 UTC 2009
Hi Florian,
> Ok, I'll change this.
>
> Do you like the name of the new method? Or do you have a better one?
> getSelectedItems
I can suggest to use the "getSelectedValuesList" and return List instead
of array, because Collections Framework is more useful than arrays.
> Is the depraction-comment good or do you have some other conventions? Do you
> have a placeholder for the version number or is 1.7 good?
> @deprecated As of JDK 1.7, replaced by {@link #getSelectedItems()}
>
> Is the since-comment in the new method good? Do you have a placeholder for the
> version number or is 1.7 good?
> @since 1.7
For deprecated methods we use the "@deprecated" annotation. For a new
API we use the next annotation: "@since 1.7"
Regards, Pavel.
>
> -Florian
>
> Am Montag, 19. Januar 2009 schrieb Pavel Porvatov:
>> Hi Florian,
>>
>>> So, does everybody agree?
>>>
>>> Would be great to also have opinions from someone working at Sun?
>>>
>>> Pavel, especially your opinion is quite important since you will probably
>>> be the one who will have to eventually accept and commit my patch. :-)
>> I think we are not able to do anything with the getSelectedValues()
>> method. So we should introduce the new method and deprecate the old one.
>>
>> Regards, Pavel.
>>
>>> -Florian
>>>
>>> Am Dienstag, 30. Dezember 2008 schrieb Jonathan Giles:
>>>> Florian,
>>>>
>>>> Your proposed solution of deprecating the old method and referring to
>>>> the new method seems like a good idea to me.
>>>>
>>>> Cheers,
>>>> Jonathan Giles
>>>>
>>>> Florian Brunner wrote:
>>>>> Hi,
>>>>>
>>>>> I hope you all had a Merry Christmas! I started now to add generics to
>>>>> ListModel and JList. While adding generics to the ListModel is quite
>>>>> straightforward, I think, there are some issues with JList, I would
>>>>> like to dicuss. I start here with the first issue: getSelectedValues
>>>>>
>>>>> Am I right, that there is no way to change the signature of this
>>>>> method to:
>>>>>
>>>>> public E[] getSelectedValues()
>>>>>
>>>>> where E is the type parameter of the class?
>>>>>
>>>>> (Because of generic array creation, which is not supported by Java.)
>>>>>
>>>>> Here is the current implementation:
>>>>>
>>>>> public Object[] getSelectedValues() {
>>>>>
>>>>> ListSelectionModel sm = getSelectionModel();
>>>>>
>>>>> ListModel dm = getModel();
>>>>>
>>>>> int iMin = sm.getMinSelectionIndex();
>>>>>
>>>>> int iMax = sm.getMaxSelectionIndex();
>>>>>
>>>>> if ((iMin < 0) || (iMax < 0)) {
>>>>>
>>>>> return new Object[0];
>>>>>
>>>>> }
>>>>>
>>>>> Object[] rvTmp = new Object[1+ (iMax - iMin)];
>>>>>
>>>>> int n = 0;
>>>>>
>>>>> for(int i = iMin; i <= iMax; i++) {
>>>>>
>>>>> if (sm.isSelectedIndex(i)) {
>>>>>
>>>>> rvTmp[n++] = dm.getElementAt(i);
>>>>>
>>>>> }
>>>>>
>>>>> }
>>>>>
>>>>> Object[] rv = new Object[n];
>>>>>
>>>>> System.arraycopy(rvTmp, 0, rv, 0, n);
>>>>>
>>>>> return rv;
>>>>>
>>>>> }
>>>>>
>>>>> If this is not possible I propose to add a new method:
>>>>>
>>>>> public List<E> getSelectedItems()
>>>>>
>>>>> and deprecate getSelectedValues:
>>>>>
>>>>> ...
>>>>>
>>>>> * @deprecated As of JDK 1.7, replaced by {@link #getSelectedItems()}
>>>>>
>>>>> */
>>>>>
>>>>> @Deprecated
>>>>>
>>>>> public Object[] getSelectedValues() {
>>>>>
>>>>> ...
>>>>>
>>>>> }
>>>>>
>>>>> /**
>>>>>
>>>>> * Returns a list of all the selected items, in increasing order based
>>>>>
>>>>> * on their indices in the list.
>>>>>
>>>>> *
>>>>>
>>>>> * @return the selected items, or an empty list if nothing is selected
>>>>>
>>>>> * @see #isSelectedIndex
>>>>>
>>>>> * @see #getModel
>>>>>
>>>>> * @see #addListSelectionListener
>>>>>
>>>>> *
>>>>>
>>>>> * @since 1.7
>>>>>
>>>>> */
>>>>>
>>>>> public List<E> getSelectedItems() {
>>>>>
>>>>> ListSelectionModel sm = getSelectionModel();
>>>>>
>>>>> ListModel<? extends E> dm = getModel();
>>>>>
>>>>> int iMin = sm.getMinSelectionIndex();
>>>>>
>>>>> int iMax = sm.getMaxSelectionIndex();
>>>>>
>>>>> if ((iMin < 0) || (iMax < 0)) {
>>>>>
>>>>> return Collections.emptyList();
>>>>>
>>>>> }
>>>>>
>>>>> List<E> selectedItems = new ArrayList<E>();
>>>>>
>>>>> for(int i = iMin; i <= iMax; i++) {
>>>>>
>>>>> if (sm.isSelectedIndex(i)) {
>>>>>
>>>>> selectedItems.add(dm.getElementAt(i));
>>>>>
>>>>> }
>>>>>
>>>>> }
>>>>>
>>>>> return selectedItems;
>>>>>
>>>>> }
>>>>>
>>>>> Note: Ignore for now 'E' vs '? extends E', I will start another thread
>>>>> for this. I'm just interested if you think it's a good idea to add the
>>>>> getSelectedItems method and to deprecate getSelectedValues.
>>>>>
>>>>> So I wish you a Happy New Year and hope to hear from you soon.
>>>>>
>>>>> -Florian
>
>
More information about the swing-dev
mailing list