Java 8 новая функция 4: оператор двоеточия (: :)

Озабоченность: Java Promotion Camp , последние статьи будут доставлены в первый раз, бесплатные учебные материалы 10T могут быть собраны в любое время! ! !

Операция с двойным двоеточием (: :), также называемая оператором ссылки на метод, используется для непосредственного вызова метода указанного класса. Его поведение в точности совпадает с лямбда-выражением. Единственное различие между ним и лямбда-выражением состоит в том, что оно использует имя для прямой ссылки на метод вместо предоставления делегата метода.

Синтаксис:

<Class name>::<method name>

Пример: Streamвсе элементы напечатаны :

  • Используйте лямбда-выражения:
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 + "\n"); 
    } 
} 
  
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 + "\n"; 
        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

рекомендация

отwww.cnblogs.com/noodlesmars/p/12720397.html