文章目录
- 1.1 方法引用符
- 1. 方法引用符
- 2. 推导与省略
- 3. 示例代码
- 4. 方法引用出现原因
- 1.2 引用类方法
- 1. 介绍
- 2. 格式及范例
- 3. 代码示例:
- 1.3 引用对象的实例方法
- 1. 介绍
- 2. 格式及范例
- 3. 示例代码
- 1.4 引用类的实例方法
- 1. 介绍
- 2. 格式及范例
- 3. 示例代码
- 1.5 引用构造器
- 1. 介绍
- 2. 格式及范例
- 3. 示例代码
 
1.1 方法引用符
1. 方法引用符
:: 该符号为引用运算符,而它所在的表达式被称为方法引用
2. 推导与省略
- 如果使用Lambda,那么根据“可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
- 如果使用方法引用,也是同样可以根据上下文进行推导
- 方法引用是Lambda的孪生兄弟
3. 示例代码
interface Print {
    void printString(String s);
}
public class Demo {
    private static  void startPrint(Print p){
        p.printString("Hello World");
    }
    public static void main(String[] args) {
        
        // Lambda简化写法
        startPrint(s -> System.out.println(s));
        
        // 方法引用
        startPrint(System.out::println);
    }
}4. 方法引用出现原因
不必重复逻辑,简化某些存在相同方案的地方需要重复相同逻辑的情况。
1.2 引用类方法
1. 介绍
- 引用类方法,其实就是引用类的静态方法
- 使用说明: Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数
2. 格式及范例
- 格式: 类名::静态方法
- 范例: Integer::parseInt
- Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据
3. 代码示例:
interface Run{
    int run(String x);
}
public class Demo {
    public static void main(String[] args) {
        //Lambda写法
       startRun(r -> Integer.parseInt(r));
        //引用类方法
        startRun(Integer::parseInt);
    }
    private static void startRun(Run r) {
        int t_run = r.run("1000m");
        System.out.println(t_run);
    }
}1.3 引用对象的实例方法
1. 介绍
- 引用对象的实例方法,其实就引用类中的成员方法
- 使用说明:Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
2. 格式及范例
- ① 格式: 对象::成员方法
- ② 范例 :"HelloWorld"::toUpperCase
- String类中的方法:public String toUpperCase()将此String所有字符转换为大写
3. 示例代码
class PrintString {
    
    // 把字符串参数变成大写的数据,然后在控制台输出
    public void printUpper(String s){
        String result = s.toUpperCase();
        System.out.println(result);
    }
}
interface Print {
    void printUpperCase(String s);
}
public class Demo{
    public static void main(String[] args) {
        
        // Lambda 简化写法
        startPrinter(s -> System.out.println(s.toUpperCase()));
        
        // 引用对象的实例方法
        PrintString ps = new PrintString();
        startPrinter(ps::printUpper);
        
    }
    
    private static void startPrinter(Print p){
        p.printUpperCase("Hello World");
    }
}1.4 引用类的实例方法
1. 介绍
- 引用类的实例方法,其实就是引用类中的成员方法
- 使用说明:Lambda表达式被类的实例方法替代的时候 第一个参数作为调用者 后面的参数全部传递给该方法作为参数
2. 格式及范例
- ① 格式: 类名::成员方法
- ② 范例:String::substringpublic String substring(int beginIndex,int endIndex)从beginIndex开始到endIndex结束,截取字符串。返回一个子串,子串的长度为endIndex-beginIndex
3. 示例代码
interface MyString {
    String mySubString(String s, int x, int y);
}
public class Demo {
    public static void main(String[] args) {
        
        // Lambda 简化写法
        startSubString((s,x,y) -> s.substring(x,y));
        
        // 引用类的实例方法
        startSubString(String::substring);
        
    }
    
    private static void startSubString(MyString ms) {
        String s = ms.mySubString("Hello World",2,5);
        System.out.println(s);
    }
}1.5 引用构造器
1. 介绍
- 引用构造器,其实就是引用构造方法
- 方法引用:Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数
2. 格式及范例
- ① 格式:类名::new
- ② 范例:Student::new
3. 示例代码
class Student {
    private String name;
    private int age;
    
    public Student() {
        
    }
    
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
}
interface StudentBuilder {
    Student build(String name,int age);
}
public class Demo {
    public static void main(String[] args) {
        //Lambda简化写法
        useStudentBuilder((name, age) -> new Student(name, age));
        //引用构造器
        useStudentBuilder(Student::new);
    }
    private static void useStudentBuilder(StudentBuilder sb) {
        
        Student s = sb.build("小明", 18);
        
        System.out.println(s.getName() + "," + s.getAge());
    }
}    
    
 
 
                     
            
        













 
                    

 
                 
                    