JavaSE-方法引用

1.函数式接口

  1. 什么是函数式接口?接口中抽象方法的个数只有一个的接口称为函数式接口。
  2. 语法:
// 函数式接口的注解
@FunctionalInterface
public interface La {
    // 抽象方法
    void af();
    // 默认方法
    default void df() {}
    // 静态方法
    static void sf() {}
}
  1. 注意:JDK8.0之后增加了默认方法、静态方法、静态内部类型。
  2. JDK8之后接口中的成员可以是如下:
    1. 常量
    2. 抽象方法
    3. 静态方法
    4. 默认方法
    5. 静态内部类型(静态内部类,静态内部接口,静态内部枚举)

2.Lambda表达式

  1. Lambda表达式的目的是为了让书写更简单
  2. Lambda表达式书写举例:
    @FunctionalInterface
    interface MysubString {
        String subStr(String s, int start, int end);
    }
    
    public class Test1 {
    
        public static void main(String[] args) {
            // 利用匿名内部类实现
            MysubString mysubString = new MysubString() {
                @Override
                public String subStr(String s, int start, int end) {
                    return s.substring(start,end);
                }
            };
    
            // 利用Lambda表达式实现
            MysubString m1 = (s,start,end) -> {return s.substring(start,end);};
        }
    }
  3. 注意事项

3.方法引用书写

  1. 引用类方法(静态方法)
    1. 语法: 类名::方法名
    2. 代码实现
      La1 la1 = (s) -> {return Integer.parseInt(s);}; 
      // 引用类方法 类名::类方法 
      La1 la2 = Integer::parseInt;
  2. 引用特定对象的实例方法
    1. 语法:特定对象::实例方法
      La1 la3 = (s) -> {return "hello".indexOf(s);}; 
      // 引用特定对象的实例方法 特定对象::实例方法 
      La1 la4 = "hello"::indexOf;
  3. 引用某类对象的实例方法
    1. 语法:类名::实例方法
      La1 la5 = (s) -> {return s.length();}; 
      // 引用某类对象的实例方法 类名::实例方法 
      La1 La6 = String::length;
  4. 引用构造器
    1. 语法:类名::new
      La2 la7 = (name) -> {return new Student(name);}; 
      // 引用构造器 类名::
      new La2 la8 = Student::new;

猜你喜欢

转载自blog.csdn.net/qq_29362113/article/details/89413523