【每周至少一篇 160811】函数对象_Java
2016-08-11 18:41
447 查看
我第一次看到这里的时候,就有一种高大上的感觉,虽然很短,两位小伙伴Gizing and Hammer看完之后和我交流。
当一个类是final类时,我们如何创建一个新的类?当我们要用函数findMax找出最大的矩形时,答案依赖于最大的边长或者是最大的面积?当我们用compareTo()比较字符串的长度时,由于该函数不区分大小写,“HBHI”按照字典排序,排在了“adaf”的前面,这显然不是我们想要的结果。
这一系列的问题的解决方案是重写函数,使得其接受两个参数:一个是对象的数组,另外一个是决定方式的函数。将函数作为参数的方法:我们可以将函数包含在一个只有函数的类中,并传递该类的一个实例。事实上,一个函数通过将其放在一个对象内部而被传递,这样的现象叫做函数对象。
这是数据结构与算法分析Java版中的分析过程,感觉很高大上,以后编代码的过程中,能把语法用到这个地步,同时能从编译器的角度来解释程序,个人觉得能力就是另外一个层面的了。
当一个类是final类时,我们如何创建一个新的类?当我们要用函数findMax找出最大的矩形时,答案依赖于最大的边长或者是最大的面积?当我们用compareTo()比较字符串的长度时,由于该函数不区分大小写,“HBHI”按照字典排序,排在了“adaf”的前面,这显然不是我们想要的结果。
这一系列的问题的解决方案是重写函数,使得其接受两个参数:一个是对象的数组,另外一个是决定方式的函数。将函数作为参数的方法:我们可以将函数包含在一个只有函数的类中,并传递该类的一个实例。事实上,一个函数通过将其放在一个对象内部而被传递,这样的现象叫做函数对象。
//Generic findMax,with function object, //Precondition:a.size()>0 Public static <AnyType> AnyType findMax(AnyType[] arr, Comparator<? Super AnyType> cmp){ Int maxIndex = 0; For(int i = 1; i < arr.size(); i++) If(cmp.compare(arr[i] , arr[maxIndex]) > 0) maxIndex = i; return arr[maxIndex]; } Class CaseInsensitiveCompare implements Comparator<String>{ Public int compare(String lhs, String rhs){ Return lhs.compareToIgnoreCase(rhs); } } Class TestProgram{ Public static void main(String[] args){ String[] arr = {“ZEBRA”, “alligator”, “crocodie”}; System.out.println(findMax(arr,new CaseInsensitiveCompare())); } } //定义的Comparator接口 Package java.util; Public interface Comparator<AnyType>{ Int compare(AnyType lhs, AnyType rhs); }
这是数据结构与算法分析Java版中的分析过程,感觉很高大上,以后编代码的过程中,能把语法用到这个地步,同时能从编译器的角度来解释程序,个人觉得能力就是另外一个层面的了。
相关文章推荐
- 学习总结(Java)
- Java中extends与implements的区别
- spring源码学习之【准备】cglib动态代理例子
- uiautomator(android-sdk)界面自动化测试+eclipse的使用
- Java开发之文件上传
- java序列化(transient和static修饰的变量的序列化实现)
- java 泛型
- Spring-Boot
- Java实现万年历
- java实现一个学生的一张考试成绩单
- eclipse 中git解决冲突
- 【每周至少一篇 160811(上周补传)】泛型_Java
- Java汉字转成汉语拼音工具类
- File Watcher,不只是一个工具
- Java7并发编程--4.3、运行多个任务并处理结果
- Spring Boot学习记录(二)--thymeleaf模板
- javafxpackager命令参数
- java下cmyk图片读取和转换rgb
- Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' ha
- java获取中文对应的全拼音