Grouping extention methods

Carlos Eduardo Gesser gesser at
Fri Dec 11 05:50:27 PST 2009

Hello everybody

What about creating a new kind of extension class, with the pourpose of
grouping extension methods to a single class/interface. E.g.:

super class ListOps<E> implements List<E> {
    void sort() { Collections.sort(this); }
    E first() { return get(0); }

super class MyStringOps extends String {
    String reverse() { ... }
    String presuffix(String p, String s) { return p + this + s; }


import ListOps;
import MyStringOps;

List list = ....
String s = "abc".reverse();
String str = s.presuffix("[", "]")

This "super class" could extend/implement a single class/interface, and can
not have constructors/fields/abstract methods.
This way we can clarify witch class/interface we are giving new methods, and
minimize the namespace pollution that would occur if we let any static
method be used as extension method.

"super class" is only a sugestion, it dispenses a new keyword.

Internally it can be implemented as the original extension method proposal:
a class with static methods taking the extended class/interface as first
parameter, with a jvm level annotation to distinguish it.

Carlos Eduardo Gesser

More information about the lambda-dev mailing list