Java 8 Defender 方法
来源:互联网 发布:百度推广cpc如何优化 编辑:程序博客网 时间:2024/05/16 09:47
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 }
这个提议貌似是为了解决Collection类的问题,但是对于一些事件Listener,则没有更好的办法,熟悉AWT和Swing GUI类库的同学都知道,像KeyListener,还有个对应的KeyAdapter,这个类覆盖所有的方法,方法体中都是空的,这样的事件类很多,基本上没有什么用,只是为了覆盖方便,不知道读Swing源代码的同学注意到了没有,Swing界面库本身从来不用这些类,你可能会问,为什么不用?其实直接实现接口如KeyListener更简单,如果继承KeyAdapter,有可能会出现方法不能正确覆盖的错误,当然,加上@Override标注后在编译时能够检测出来这些问题,更进一步,通过直接实现接口KeyListener,可以将控件或者GUI程序的所有事件类集中到一个类中,通过一个类实现多个接口,减少类的数目,为什么要减少类的数目,这是除了以前提到Swing单线程问题之外,另一个关于Swing GUI性能问题的关键(针对这个问题,Swing核心类库,就是javax.swing.plaf包中的几乎所有的XXXUI类都进行了改造,忘了是从JDK1.4还是JDK1.5开始),以后有机会再谈,现在想了解这个问题的同学可以看看BasicTreeUI这个类的内部类Handler和方法getHandler()方法,同一个包中几乎所有的XXXUI都有一个这样的内部类。
我个人不是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提议!
- Java 8 Defender 方法
- Java 8 Defender 方法
- Java 8新特性——default方法(defender方法)介绍
- windows 8 Defender 功能
- 关闭Windows Defender的方法
- Defender杀毒软件冲突 win8系统Defender关闭方法
- java8新特性-default方法(defender方法)介绍
- windows 10 defender 577的错误处理方法
- Windows:Windows 8下添加Windows Defender到右键菜单
- Widows defender
- Hacker defender 中文使用说明
- Hacker defender - 中文使用说明
- Remove Albinos Defender Scam
- Remove Alfa Defender Pro
- Malware Defender 温馨规则
- 重启windows defender
- Windows Defender 离线版
- Java8-default / defender关键字
- UTF-8编码的页面向GBK页面提交表单乱码问题的解决办法
- Tizen成为Intel Elements 2011会议全新主题
- UML之用例图
- 服务器调用客户端程序解决方案
- VB Link 操作(DDE 会话)
- Java 8 Defender 方法
- 目前的Java前景
- Java Web应用程序开发虚拟目录的根目录
- configure: error: GRUB requires a working absolute objcopy; upgrade your binutils 解决方法
- 【转载】新浪微博布局学习——妙用TabHost
- Log4net创建日志及简单扩展
- 将word文档按分页另存为多个word文件的VBA代码
- VC中Error spawning cl.exe错误的解决方法
- android之响应的系统设置的事件