Brian Goetz有个关于Java语言改变的提议,Defender methods,这个提议定义了一个abstract方法的默认实现,这个想法很好,不过感觉extension这个关键字有点多余,如果定义一个abstract方法有个default的实现,为什么不是所有的abstract方法都有这个功能,而仅仅是标示为extension这个关键字的方法,另外提议也说明了这种解决办法还是难以取代一个接口的skeletal实现类:
提议中的例子:
public interface Set<T> extends Collection<T> { extension public int size() default AbstractSetMethods.size; extension public boolean isEmpty() default AbstractSetMethods.isEmpty; // The rest of the Set methods, most having defaults }
我个人不是Java语言层面的专家,但是建议如果接口的所有方法都能够支持添加个default实现,就非常方便了,这样KeyAdapter这个类就不需要了,事件接口都这样定义:
public interface KeyListener extends EventListener { public void keyTyped(KeyEvent e) default; public void keyPressed(KeyEvent e) default; public void keyReleased(KeyEvent e) default; }default后没有定义静态方法,就默认这个方法没有被子类覆盖时是个空的实现,如果不定义default子句,则和原来的行为一样,子类没有覆盖时编译提示出错!
类似事件类型这种类目前Lambda 也就是Java Closure提议也没有很好的解决办法,目前的Java Closure提议主要是解决类似Runnable这样只有一个方法的接口的问题的,就是不需要提供一个Runnable子类,提供个Closure函数对象就可以调用了,以后有空再谈Java 8 即将添加的Closure提议!