java回调函数的使用
2016-03-02 09:45
351 查看
今天看了看java的回调函数的简单使用,有点感想。
java为了避免C/C++的指针的使用错误,去除了指针这个功能,但是却保留了函数指针的功能,即回调函数。
所谓回调函数,就是指函数现在某处注册(已经写好),而它将在稍后某个需要的时候被调用。
举例如下:
现在已经实现了插入排序的升序方法,如下:
interface IntCompare{
public int cmp(int a,int b);
}
class Cmp1 implements IntCompare{
@Override
public int cmp(int a, int b) {
// TODO Auto-generated method stub
if(a > b){
return 1;
}else if(a < b){
return -1;
}else{
return 0;
}
}
}
IntCompare是一个接口,里面只有一个比较的方法的声明。Cmp1是对IntCompare的实现,里面很简单,当a>b,则返回1,a<b,则返回-1,a=b,则返回0。
插入排序代码如下:
public static void insertSort(int[] nums, IntCompare cmp){
if(nums != null){
for(int i = 1; i < nums.length; i++){
int temp = nums[i],j = i;
if(cmp.cmp(nums[i-1], temp) == 1){
while(j >= 1 && cmp.cmp(nums[j-1], temp) == 1){
nums[j] = nums[j-1];
j--;
}
}
nums[j] = temp;
}
}
}主代码如下:
int[] nums1 = {7,3,19,40,4,7,1,15};
insertSort(nums1,new Cmp1());
for(int a:nums1)
System.out.print(a + " ");
和普通的插入排序不同的时,参数多了一个自己定义的IntCompare对象cmp,将Cmp1实例化的对象作为参数传至inserSort()中,Cmp1的cmp方法中,当cmp(a,b)==1时,代表a>b。即nums[i-1]>temp,也就是当前处于降序的状态。会进入到函数主体中。
现要求实现降序排列,再写一个方法肯定是低效率的,那么按照Cmp1的类,再写一个Cmp2类,将Cmp2放入insertSort()中,就可以实现降序排列。
具体实现如下:
class Cmp2 implements IntCompare{
public int cmp(int a,int b){
if(a < b){
return 1;
}else if(a > b){
return -1;
}else{
return 0;
}
}
}
java为了避免C/C++的指针的使用错误,去除了指针这个功能,但是却保留了函数指针的功能,即回调函数。
所谓回调函数,就是指函数现在某处注册(已经写好),而它将在稍后某个需要的时候被调用。
举例如下:
现在已经实现了插入排序的升序方法,如下:
interface IntCompare{
public int cmp(int a,int b);
}
class Cmp1 implements IntCompare{
@Override
public int cmp(int a, int b) {
// TODO Auto-generated method stub
if(a > b){
return 1;
}else if(a < b){
return -1;
}else{
return 0;
}
}
}
IntCompare是一个接口,里面只有一个比较的方法的声明。Cmp1是对IntCompare的实现,里面很简单,当a>b,则返回1,a<b,则返回-1,a=b,则返回0。
插入排序代码如下:
public static void insertSort(int[] nums, IntCompare cmp){
if(nums != null){
for(int i = 1; i < nums.length; i++){
int temp = nums[i],j = i;
if(cmp.cmp(nums[i-1], temp) == 1){
while(j >= 1 && cmp.cmp(nums[j-1], temp) == 1){
nums[j] = nums[j-1];
j--;
}
}
nums[j] = temp;
}
}
}主代码如下:
int[] nums1 = {7,3,19,40,4,7,1,15};
insertSort(nums1,new Cmp1());
for(int a:nums1)
System.out.print(a + " ");
和普通的插入排序不同的时,参数多了一个自己定义的IntCompare对象cmp,将Cmp1实例化的对象作为参数传至inserSort()中,Cmp1的cmp方法中,当cmp(a,b)==1时,代表a>b。即nums[i-1]>temp,也就是当前处于降序的状态。会进入到函数主体中。
现要求实现降序排列,再写一个方法肯定是低效率的,那么按照Cmp1的类,再写一个Cmp2类,将Cmp2放入insertSort()中,就可以实现降序排列。
具体实现如下:
class Cmp2 implements IntCompare{
public int cmp(int a,int b){
if(a < b){
return 1;
}else if(a > b){
return -1;
}else{
return 0;
}
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序