English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يُستخدم استدعاء الطريقة عبر اسم الطريقة للإشارة إلى طريقة.
يمكن لاستدعاء الطريقة جعل بناء اللغة أكثر تكدسًا وسهولة، مما يقلل من الكود المكرر.
يستخدم استدعاء الطريقة زوج من العلامات الثلاثية ::.
في هذا الجزء، قمنا في فئة Car بتعريف 4 طرق كنماذج لتمييز 4 أنواع مختلفة من الإشارات إلى الطرق في Java.
package com.w3codebox.main; @FunctionalInterface public interface Supplier<T> { T get(); {} class Car { //Supplier هو واجهة JDK1.8، هنا تم استخدامها مع lambda public static Car create(final Supplier<Car> supplier) { return supplier.get(); {} public static void collide(final Car car) { System.out.println("Collided " + car.toString()); {} public void follow(final Car another) { System.out.println("Following the " + another.toString()); {} public void repair() { System.out.println("Repaired " + this.toString()); {} {}
استدلال على المكونجملة النص هي Class::new أو أكثر عامة Class<T>::new مثال التالي:
final Car car = Car.create(Car::new); final List<Car> cars = Arrays.asList(car);
استدلال على طريقة ثابتةجملة النص هي Class::static_method مثال التالي:
cars.forEach(Car::collide);
استدلال على طريقة معينة للفئة العشوائية من العناصرجملة النص هي Class::method مثال التالي:
cars.forEach(Car::repair);
استدلال على طريقة معينة للعنصرجملة النص هي instance::method مثال التالي:
final Car police = Car.create(Car::new); cars.forEach(police::follow);
أدخل الكود التالي في ملف Java8Tester.java:
import java.util.List; import java.util.ArrayList; public class Java8Tester { public static void main(String args[]){ List<String> names = new ArrayList(); names.add("Google"); names.add("w3codebox"); names.add("Taobao"); names.add("Baidu"); names.add("Sina"); names.forEach(System.out::println); {} {}
في هذا المثال، سنستخدم System.out::println كطريقة ثابتة للاشارة إليها.
ت�行 سطر الأوامر أعلاه، الناتج المطلوب هو:
$ javac Java8Tester.java $ java Java8Tester Google w3codebox Taobao Baidu Sina