猿问

*Java 8中的(双冒号)运算符

*Java 8中的(双冒号)运算符

我当时正在探索Java 8源代码,发现这个特定的代码部分非常令人惊讶:

//defined in IntPipeline.java@Overridepublic final OptionalInt reduce(IntBinaryOperator op) {
    return evaluate(ReduceOps.makeInt(op));}@Overridepublic final OptionalInt max() {
    return reduce(Math::max); //this is the gotcha line}//defined in Math.javapublic static int max(int a, int b) {
    return (a >= b) ? a : b;}

Math::max类似于方法指针的东西?正常人static方法转换为IntBinaryOperator?


HUX布斯
浏览 1373回答 3
3回答

慕娘9325324

是的,那是真的。这个::运算符用于方法引用。所以,我们可以提取静态通过使用它或对象中的方法从类中获取的方法。即使对于构造函数,也可以使用相同的运算符。这里提到的所有情况都在下面的代码示例中得到了举例说明。Oracle的官方文档可以找到这里.您可以更好地了解jdk 8的更改。这,这个文章。在方法/构造器引用还提供了一个代码示例:interface ConstructorReference {     T constructor();}interface  MethodReference {    void anotherMethod(String input);}public class ConstructorClass {     String value;    public ConstructorClass() {        value = "default";    }    public static void method(String input) {       System.out.println(input);    }    public void nextMethod(String input) {        // operations    }    public static void main(String... args) {        // constructor reference        ConstructorReference reference = ConstructorClass::new;        ConstructorClass cc = reference.constructor();        // static method reference        MethodReference mr = cc::method;        // object method reference        MethodReference mr2 = cc::nextMethod;        System.out.println(cc.value);    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答