java8之行为参数化(二)

      上一章讲到我们可以使用策略模式使得变动的代码块更具有扩展性,实现参数化。可是,如果变动的代码块只使用一次呢,也就是说,我们仅用一次接口的实现类呢?这时,我们会发现,为接口编写实现类简直就是浪费。显然,匿名类此时就派上用场了。

// [Apple{color='green', weight=155}]
List<Apple> heavyApples2 = filter(inventory, new ApplePredicate(){
   public boolean test(Apple apple){
      return apple.getWeight() > 150;
   }
});
System.out.println(heavyApples2);
怎么样,是不是觉得看起来容易多了?但这都是java8之前的东西了,java8出现之后,更简便的方法变横空出世了。

在调用部分,我们只需写调用方法即可,系统会自动将方法注入到接口的实现方法内部。

public static boolean isHeavyApple(Apple apple) {
    return apple.getWeight() > 150;
}
// [Apple{color='green', weight=155}]
List<Apple> heavyApples = filterApples(inventory, FilteringApples::isHeavyApple);
System.out.println(heavyApples);
是不是感觉特别简洁?别急,还有更简洁的,我们可以不用写函数,直接采用匿名函数,也就是Lambda。

// [Apple{color='green', weight=155}]
List<Apple> heavyApples2 = filterApples(inventory, (Apple a) -> a.getWeight() > 150);
System.out.println(heavyApples2);
到现在为止,想想我们要实现行为参数化,需要几个步骤呢?

1、函数定义。

2、函数的参数为一个接口,定义这个接口

3、调用这个函数。

其实,这个接口被称为断言,在java8中已经定义好了Predicate

我们要做的就是定义一个函数,并在调用这个函数时,将lambda传进断言里即可。

猜你喜欢

转载自blog.csdn.net/bird_one/article/details/78219189
今日推荐