Java 回调(callback) 内部类(innerclass)

/**
 * 动物
 */
public class Animal {
    private String name;
    private int leg;//腿数量
    private int weight;//重量

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLeg() {
        return leg;
    }

    public void setLeg(int leg) {
        this.leg = leg;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
}

 

import java.util.List;

/**
 * 动物园
 */
public class Zoo {
    private String name;
    private List<Animal> animalList;

    /**
     * 统计动物的总重量
     * @return
     */
    public int calculateWeight(){
        return calculateTotal(new CallBack(){
            public int getAmount(Animal animal) {
                return animal.getWeight();
            }
        });
    }

    /**
     * 统计腿的数量
     * @return
     */
    public int calculateLegs(){
        return calculateTotal(new CallBack(){
            public int getAmount(Animal animal) {
                return animal.getLeg();
            }
        });
    }

    /**
     * 为了calculateTotal回调,写一个回调的接口,
     * javascrip相对就会方便许多,不需要定义这个接口
     */
    interface CallBack {
        int getAmount(Animal animal);
    }

    /**
     * 将统计的算法等装在此
     * @param callBack
     * @return
     */
    private int calculateTotal(CallBack callBack){
        int total = 0;
        for (Animal animal : animalList) {
            total = total + callBack.getAmount(animal);
        }
        return total;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Animal> getAnimalList() {
        return animalList;
    }

    public void setAnimalList(List<Animal> animalList) {
        this.animalList = animalList;
    }
}
 

 

假设动物园里面有一群动物,我们要做一个统计动物的重量功能,如calculateWeight,还要做一个统计动物腿的数量的方法,其统计算法都一样,对于这种情况,就可以写一个callback,来完成。为了方便,所以直接写一个内部类接口,等java有了闭包功能,就不必多定义这个接口了:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值