zoukankan      html  css  js  c++  java
  • Java学习笔记——回调函数

    转载:http://wangyang0311.iteye.com/blog/368031

    一般来说分为以下几步:

    1. 声明回调函数的统一接口interface A,包含方法callback();
    2. 在调用类caller内将该接口设置为私有成员private A XXX;
    3. 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX);
    4. caller的某个方法dosth()中会用到XXX.callback()方法;
    5. 在caller的实例中,先实现A接口,后调用dosth()方法;

    网上流行代码:

    //回调函数接口及方法
    public interface ICallback { 
      public void   func();  
    }
    //回调函数接口实现类
    public class ClassWithCallbackFunction implements ICallback{
      public ClassWithCallbackFunction() {
      }
      public void func(){
        System.out.println("cccccccccccccccccc");
      }
    }    
    public class Caller {
      private ICallback callback;  //私有接口成员      
      public void setCallback(ICallback callback) {
        this.callback = callback;  //接口成员的实现:从外部传入
      } 
      public void doCallback() {   //回调接口成员的方法
        callback.func();
      }
     }
    }
    public class MainClass {
      public MainClass() {
      }
      public static void main(String[] args) {
        Caller caller = new Caller();
        caller.setCallback(new ClassWithCallbackFunction() {
          public void func() {
            System.out.println("aaaaaaaaaa");
          }
        });
        caller.doCallback();      //实现回调
      }
    }  
    //现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理
    public class Caller {
      ICallback callback;
      public void doCallback() {
        callback.func();
      }
      public void setCallback(ICallback callback) {
        this.callback = callback;
        doCallback();
      }
    }

    java排序接口

    interface Compare {
       boolean lessThan(Object lhs, Object rhs);
       boolean lessThanOrEqual(Object lhs, Object rhs);
      }
    
    import java.util.*;
      
      public class SortVector extends Vector {
       private Compare compare; // 私有接口成员
       public SortVector(Compare comp) {
           compare = comp;
       }
       public void sort() {
           quickSort(0, size() - 1);
       }
       private void quickSort(int left, int right) {
           if(right > left) {
          Object o1 = elementAt(right);
          int i = left - 1;
          int j = right;
          while(true) {
               while(compare.lessThan(
                 elementAt(++i), o1))
                          ;
               while(j > 0)
                 if(compare.lessThanOrEqual(
                      elementAt(--j), o1))
                         break; 
                  if(i >= j) break;
                      swap(i, j);
           }
          swap(i , right);
          quickSort(left, i-1);
          quickSort(i+1, right);
           }
        }
        private void swap(int loc1, int loc2) {
           Object tmp = elementAt(loc1);
           setElementAt(elementAt(loc2), loc1);
           setElementAt(tmp, loc2);
       }
      } 
  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/travellife/p/4053529.html
Copyright © 2011-2022 走看看