JDK8新特性之函数式接口

函数式接口规范

1、@FunctionalInterface标识为一个函数式接口只能用在只有一个抽象方法的接口上。

2、接口中的静态方法、默认方法、覆盖了Object类的方法都不算抽象方法。

3、@FunctionalInterface注解不是必须的,如果该接口只有一个抽象方法可以不写,它默认就符合函数式接口,但建议都写上该注解,编译器会检查该接口是否符合函数式接口的规范。

自定义函数式接口

//一个简单的函数式接口定义
@FunctionalInterface
public interface MyInterface<N,V>{
    V operation(N n1,N n2);
}
//带默认方法和静态方法的函数式接口定义
@FunctionalInterface
public interface MyInterface<N,V>{
        
 V operation(N n1,N n2);
    
 public boolean equals(Object object);
    
 public default void defaultMethod(){
    
 }
    
 public static void staticMethod(){
	
 }
}

函数式接口使用方式

public static class NumberOperation<N extends Number, V extends Number>{
    private N n1;
    private N n2;
    
   public NumberOperation(N n1,N n2){    
      this.n1 =n1;      
      this.n2 =n2;
  }
    
   //作为方法参数使用
   public V calc(MyInterface<N,V> mf){
        V v =mf.operation(n1,n2);
       return v;
    }
}

使用测试

private static void test(){
	 NumberOperation<Integer,Integer>np =new NumberOperation(11,20);

	 MyInterface<Integer,Integer> addOper1 =(n1,n2)->{
			return n1 +n2;
	 };

	 MyInterface<Integer,Integer> multiOper1 =(n1, n2)->{
	  return n1 * n2;
	 };
		
	 System.out.println(np.calc1(addOper1));

	 System.out.println(np.calc1(multiOper1));

	 //也可以使用Lambda表达式来表示该接口的一个实现
	 System.out.println (np.calc1((n1, n2)-> n1 + n2));

	 System.out.println(np.calc1((n1, n2)-> n1 * n2));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值