Migrating methods in Collections

Doug Lea dl at cs.oswego.edu
Wed Dec 23 16:13:26 UTC 2015


Isolating one small issue for now:

On 12/23/2015 10:52 AM, Brian Goetz wrote:

>> Doing nothing about List.remove(index) seems to be legal option.
>
> Yes, that's a legal option (just as today, you can overload foo(T) and
> foo(String)).  Not sure if it *should* be a legal option (at the very least, the
> compiler should warn you of this, as it should also probably with overloads that
> fail to follow a meet rule.)
>
>> No
>> existing code will encounter an ambiguity that is not already present
>> due to autoboxing (for List<Integer>). New code using or implementing
>> List<int> will need some way to disambiguate. But I think that some
>> syntax will be needed to allow anyway.  It might be nice introduce
>> method removeAt to reduce need to use this syntax, but doesn't seem
>> necessary?
>
> Can you expand on what you might want for disambiguation here?
>

Not sure; possibly nothing considering that users already (since jdk5)
live with this compiling without warning:

import java.util.*;
public class RemoveInteger {
     public static void main(String[] args) {
         List<Integer> c = new ArrayList<Integer>();
         c.add(1);
         c.remove(1);
         System.out.println(c);
     }
}

Running ...

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
	at java.util.ArrayList.rangeCheck(ArrayList.java:659)
	at java.util.ArrayList.remove(ArrayList.java:495)
	at RemoveInteger.main(RemoveInteger.java:8)



More information about the valhalla-spec-experts mailing list