ClassName::methodName 是一个方法引用(Method Reference)的表示形式 主要用于简化Lambda表达式

在Java中,ClassName::methodName 是一个方法引用(Method Reference)的表示形式。这是Java 8引入的一个新特性,主要用于简化Lambda表达式。它允许你更简洁、更易读的方式引用一个已存在的方法。
方法引用分为以下几种类型:

1.静态方法引用:ClassName::staticMethodName
2.某个对象的实例方法引用:instance::instanceMethodName
3.类的任意对象的实例方法引用:ClassName::instanceMethodName
4.构造函数引用:ClassName::new

工作原理
当你有一个函数式接口,并且你需要使用一个已经存在的方法来实现这个接口的时候,你可以使用方法引用。
例如,考虑以下函数式接口:
@FunctionalInterface
interface Converter {
    int convert(String s);
}

假设你有一个静态方法:
public class StringConverter {
    public static int stringToInt(String s) {
        return Integer.parseInt(s);
    }
}

使用Lambda表达式,你可以这样实现Converter接口:

Converter myConverter = (s) -> StringConverter.stringToInt(s);
 

使用方法引用,你可以更简洁地写:
Converter myConverter = StringConverter::stringToInt;

当你调用 myConverter.convert("123") 的时候,它实际上调用的是 StringConverter.stringToInt("123")。
这样做的好处是,代码更简洁,可读性也更强。
示例
静态方法引用

public class Test {
    public static void printSomething(String something) {
        System.out.println(something);
    }

    public static void main(String[] args) {
        List list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(Test::printSomething);  // 使用静态方法引用
    }
}
 

某个对象的实例方法引用

public class Printer {
    public void printSomething(String something) {
        System.out.println(something);
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        List list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(printer::printSomething);  // 使用实例方法引用
    }
}
 

类的任意对象的实例方法引用
public class Test {
    public static void main(String[] args) {
        List list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(String::toUpperCase);  // 使用任意对象的实例方法引用
    }
}
 

构造函数引用

@FunctionalInterface
interface Factory {
    T create();
}

class MyClass {
    MyClass() {
        System.out.println("MyClass Constructor Called");
    }

    public static void main(String[] args) {
        Factory factory = MyClass::new;  // 使用构造函数引用
        MyClass myClass = factory.create();
    }
}
 

你可能感兴趣的:(windows)