• Java 8新特性四:Double colon(::) operator


    关注:Java提升营,最新文章第一时间送达,10T 免费学习资料随时领取!!!

    双冒号(::)操作,也被称为方法引用运算符,用于直接调用指定类的方法。它的行为与la​​mbda表达式完全相同。它与lambda表达式的唯一区别在于,它使用名称直接引用方法,而不是提供方法的委托。

    语法:

    <Class name>::<method name>
    

    示例:打印Stream的所有元素:

    • 使用Lambda表达式:
    stream.forEach(s-> System.out.println(s));
    

    完整示例:

    // Java code to print the elements of Stream 
    // without using double colon operator 
      
    import java.util.stream.*; 
      
    class GFG { 
        public static void main(String[] args) 
        { 
      
            // Get the stream 
            Stream<String> stream 
                = Stream.of("Geeks", "For", 
                            "Geeks", "A", 
                            "Computer", 
                            "Portal"); 
      
            // Print the stream 
            stream.forEach(s -> System.out.println(s)); 
        } 
    } 
    

    输出:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    
    • 使用双冒号运算符:
    stream.forEach(System.out::println(s));
    

    完整示例:

    // Java code to print the elements of Stream 
    // using double colon operator 
      
    import java.util.stream.*; 
      
    class GFG { 
        public static void main(String[] args) 
        { 
      
            // Get the stream 
            Stream<String> stream 
                = Stream.of("Geeks", "For", 
                            "Geeks", "A", 
                            "Computer", 
                            "Portal"); 
      
            // Print the stream 
            // using double colon operator 
            stream.forEach(System.out::println); 
        } 
    } 
    

    输出:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    

    什么时候和如何使用双冒号运算符?

    方法引用双冒号运算符可用于以下方法:

    • 静态方法
    • 实例方法
    • 构造函数

    如何在Java中使用方法引用:

    1. 静态方法

    语法:

    (ClassName::methodName)
    

    示例:

    SomeClass::someStaticMethod
    

    完整示例:

    // Java code to show use of double colon operator 
    // for static methods 
      
    import java.util.*; 
      
    class GFG { 
      
        // static function to be called 
        static void someFunction(String s) 
        { 
            System.out.println(s); 
        } 
      
        public static void main(String[] args) 
        { 
      
            List<String> list = new ArrayList<String>(); 
            list.add("Geeks"); 
            list.add("For"); 
            list.add("GEEKS"); 
      
            // call the static method 
            // using double colon operator 
            list.forEach(GFG::someFunction); 
        } 
    } 
    

    输出:

    Geeks
    For
    GEEKS
    
    1. 实例方法

    语法:

    (objectOfClass::methodName)
    

    示例:

    System.out::println
    

    完整示例:

    // Java code to show use of double colon operator 
    // for instance methods 
      
    import java.util.*; 
      
    class GFG { 
      
        // instance function to be called 
        void someFunction(String s) 
        { 
            System.out.println(s); 
        } 
      
        public static void main(String[] args) 
        { 
      
            List<String> list = new ArrayList<String>(); 
            list.add("Geeks"); 
            list.add("For"); 
            list.add("GEEKS"); 
      
            // call the instance method 
            // using double colon operator 
            list.forEach((new GFG())::someFunction); 
        } 
    }
    

    输出:

    Geeks
    For
    GEEKS
    
    1. 父类方法

    语法:

    (super :: methodName)
    

    示例:

    super::someSuperClassMethod
    

    完整示例:

    // Java code to show use of double colon operator 
    // for super methods 
      
    import java.util.*; 
    import java.util.function.*; 
      
    class Test { 
      
        // super function to be called 
        String print(String str) 
        { 
            return ("Hello " + str + "
    "); 
        } 
    } 
      
    class GFG extends Test { 
      
        // instance method to override super method 
        @Override
        String print(String s) 
        { 
      
            // call the super method 
            // using double colon operator 
            Function<String, String> func = super::print; 
      
            String newValue = func.apply(s); 
            newValue += "Bye " + s + "
    "; 
            System.out.println(newValue); 
      
            return newValue; 
        } 
      
        // Driver code 
        public static void main(String[] args) 
        { 
      
            List<String> list = new ArrayList<String>(); 
            list.add("Geeks"); 
            list.add("For"); 
            list.add("GEEKS"); 
      
            // call the instance method 
            // using double colon operator 
            list.forEach(new GFG()::print); 
        } 
    }
    

    输出:

    Hello Geeks
    Bye Geeks
    
    Hello For
    Bye For
    
    Hello GEEKS
    Bye GEEKS
    
    1. 特定类型对象的实例方法

    语法:

    (ClassName::methodName)
    

    示例:

    SomeClass::someInstanceMethod
    

    完整示例:

    // Java code to show use of double colon operator  
    // for instance method of arbitrary type  
      
    import java.util.*;  
      
    class Test {  
        String str=null; 
    
        Test(String s) 
        { 
            this.str=s; 
        }
    
        // instance function to be called  
        void someFunction()  
        {  
            System.out.println(this.str);  
        }  
    }  
      
    class GFG {  
      
        public static void main(String[] args)  
        {  
      
            List<Test> list = new ArrayList<Test>();  
            list.add(new Test("Geeks"));  
            list.add(new Test("For"));  
            list.add(new Test("GEEKS"));  
      
            // call the instance method  
            // using double colon operator  
            list.forEach(Test::someFunction);  
        }  
    }
    

    输出:

    Geeks
    For
    GEEKS
    
    1. 类构造器

    语法:

    (ClassName::new)
    

    示例:

    ArrayList::new
    

    完整示例:

    // Java code to show use of double colon operator 
    // for class constructor 
      
    import java.util.*; 
      
    class GFG { 
      
        // Class constructor 
        public GFG(String s) 
        { 
            System.out.println("Hello " + s); 
        } 
      
        // Driver code 
        public static void main(String[] args) 
        { 
      
            List<String> list = new ArrayList<String>(); 
            list.add("Geeks"); 
            list.add("For"); 
            list.add("GEEKS"); 
      
            // call the class constructor 
            // using double colon operator 
            list.forEach(GFG::new); 
        } 
    }
    

    输出:

    Hello Geeks
    Hello For
    Hello GEEKS
    
  • 相关阅读:
    JavaScript 定时器
    JavaScript 面向对象
    JavaScript 数组Array
    JavaScript 基础
    HTML 基础
    HTML 常用标签
    python 线程/进程模块
    python GIL锁
    python 网络编程--socket模块/struct模块
    python 异常处理,约束
  • 原文地址:https://www.cnblogs.com/noodlesmars/p/12720397.html
Copyright © 2020-2023  润新知