JDk1.8新特性之方法引用

方法的引用方式是用—>类名::方法名
具体写法:
构造器的引用 Class::new
静态方法引用 Class::静态方法名称
特定的类的任意对对象引用 Class::非静态方法名称
特定对象的方法引用 对象::非静态方法名称

其本质还是lambda表达式

	//java7写法
	Car car1=Car.create(new Supplier<Car>(){
		public Car get(){
			return new Car();
		}
	});
	System.out.println(car1);
	//java8的lambda的写法
	Car car2=Car.create(()->{return new Car();});
	System.out.println(car2);
	//java8的方法的引用            构造方法的引用,替代了接口中重写的get方法
	Car car3=Car.create(Car::new);//Car::new等价于()->{return new Car();}
	System.out.println(car3);
	//java8的方法的引用            静态方法的引用 Class::staticmethod
	List<Car> cars=Arrays.asList(car1,car2,car3);
	cars.forEach(Car::collide);//Car::collide等价于(car)->Car.collide(car)
	//等价于
	cars.forEach((car)->Car.collide(car));
	
	//java8的方法的引用    用非静态方法引用    Class::method 
	cars.forEach(Car::repair);
	//等价于
	cars.forEach((car)->car.repair());
	//java8的方法的引用    用指定对象调用非静态方法    instacne对象::method 
	Car car4=Car.create(Car::new);
	cars.forEach(car4::follow);
	//等价于
	cars.forEach((car)->car4.follow(car));

Car类:

public class Car {
			//静态创建
			public static Car creat(final Supplier<Car> suppier){
				return suppier.get();
			}
			//静态碰撞方法
			public static void collide(final Car car){
				System.out.println("碰撞-->"+car.toString());
			}
			//非静态跟随
			public void follow(final Car car){
				System.out.println("跟随-->"+car.toString());
			}
			public void repair(){
				System.out.println("维修-->"+this.toString());
			}
		}

Supplier接口:

@FunctionalInterface
	public interface Supplier<T>{
		public T get();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值