java匿名内部类以及java8新增的lambda方法

说实话啊,本来以为自己的匿名内部类学的还可以,可是在学习hashSet方法中重写了comparable函数式接口时,居然被这个匿名内部类,弄得自己一头雾水,真是恼火啊,自己又重新看了一遍,对它有了一定的理解了。
那就通过一个小例子来演示一遍吧,首先你得了解内部类,言简意赅就是在类之内再定义一个类,不同于子类。包含内部类的类被称为外部类。内部类有以下几个特点:
-》内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许通同一个包的其他类访问该类。
-》内部类成员可以直接访问外部类的私有数据。
-》***匿名内部类适合于创建那些仅需一次使用的类。也就是所谓的函数式接口。
-》外部类只能用public 或者包限制符,就是没有修饰符。而内部类可以使用private,protected,static修饰符。
匿名内部类的实现形式是:
new 接口()|父类构造器(实参列表){

    //匿名内部类的类体部分
 }
 下面是一段程序,仿造买东西的过程。
 package niming;

interface Food{
public double getPrice();
public String getName();
}
public class Buy {
public void say(Food f){
System.out.println(“购买了一个”+f.getName()+”,花掉了”+f.getPrice()+”块钱”);
}
public static void main(String[] args){
Buy buy=new Buy();
buy.say(new Food() {

        @Override
        public double getPrice() {
            // TODO Auto-generated method stub
            return 20;
        }

        @Override
        public String getName() {
            // TODO Auto-generated method stub
            return "苹果";
        }
    });
}

}

 这是一般的匿名内部类的编码方式,其实这个就很简单了,可是oracle就是觉得太麻烦了,于是在java8中又加入了lambda方法。这个lambda方法就是把带有函数式接口的接口,在实现其匿名内部类时,把能省的代码能省既省。所以你就会看到下面匿名内部类实现的部分变成下面这样(函数式接口:只有一个抽象方法的接口)下面通过一段程序来介绍lambda方法使用。
 package Lambda;

interface Eatable{
void taste();//函数式接口
}
interface Flyable{
void fly(String wwather);
}
interface Addable{
int add(int a,int b);
}
public class LambdaQs {
public void eat(Eatable e){
System.out.println(e);
e.taste();
}
public void drive(Flyable f){
System.out.println(“我正在驾驶:”+f);
f.fly(“美好的晴天!”);
}
public void test(Addable add){
System.out.println(“5和3的和是:”+add.add(5, 3));
}
public static void main(String[] args) {
LambdaQs lQs=new LambdaQs();
lQs.eat(()->System.out.println(“苹果的味道不错!”));//1
lQs.drive(weather->{//2
System.out.println(“今天的天气是:”+weather);
System.out.println(“直升机飞行平稳!”);
lQs.test((a,b)->a+b);//3
});
}
}

 1:在1处继承了Eatable接口的taste方法,方法体中没有形参,所以在lambda中就可以用()代替变成了()->,而且它省去重写方法这个步骤,让代码看起来更简便。
 2:在2处有形参,故,这是就变成了(形参)->的形式。
 3:在3处,省略了return语句,这是因为lambda表达式会在函数式接口中自己返回一个return语句。
 其中就函数式接口,还有一些java自带的,主要就是Runnable,ActionListener,Function,以及Arrays方法。
 例如java新增的paralleSort方法。
 Arrays.parallelSort(arr1,(o1,o2)->o1.length()-o2.length());
 这段代码的意思是返回字符串短的,就是排序,升序排序。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值