Extension methods and API evolution

Mikael Grev grev at miginfocom.com
Sat Dec 19 12:10:30 PST 2009


This works for me as well. As long as there is a way to declare it that's ok.

On Dec 19, 2009, at 20:37 PM, Stefan Schulz wrote:

> Peter Levart wrote:
>> A no-language-change alternative of that might be standardizing an annotation in the JDK
>> platform that every IDE would add support for. For example:
>> 
>> package java.util;
>> 
>> @UtilityMethods({
>>     "java.util.Collections#binarySearch",
>>     "java.util.Collections#checkedList",
>>     "java.util.Collections#fill",
>>     "java.util.Collections#indexOfSubList",
>>     "java.util.Collections#lastIndexOfSubList",
>>     "java.util.Collections#replaceAll",
>>     "java.util.Collections#reverse",
>>     "java.util.Collections#rotate",
>>     "java.util.Collections#shuffle",
>>     "java.util.Collections#sort",
>>     "java.util.Collections#swap",
>>     "java.util.Collections#synchronizedList",
>>     "java.util.Collections#unmodifiableList"
>> })
>> public interface List<E>  extends Collection<E>  {
>> ...
> 
> While this is on declaration-site extension methods, I could think of this working for use-site extension methods as well. As IDEs need to scan and index classes anyway, this would help in finding matching use-site extensions a lot. Even better, as no String-matching is needed. For example:
> 
> package java.util;
> 
> public class Collections {
> 
>    @ExtensionMethod(List.class)
>    public static <T extends Comparable<? super T>>
>        void sort(List<T> list) {...}
> ...
> }
> 
> Stefan



More information about the lambda-dev mailing list