0Pricing
Java Academy · درس

مراجع أساليب الكائن في مثيل محدد

التقط كائنًا محددًا وأشر إلى أحد أساليب الكائن فيه لاستخدامه مع callbacks وlisteners

مراجع أساليب الكائن في مثيل محدد درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

مرجع مثيل محدد

يحتفظ مرجع طريقة مثيل على مثيل محدد بكائن معين ويشير إلى إحدى طرقه. الصيغة: instance::methodName.

// System.out is a specific PrintStream instance
List<String> names = List.of("Alice","Bob","Carol");
names.forEach(System.out::println); // System.out is the captured instance

التقاط مثيل لكائن مخصص

يمكن التقاط أي كائن. ويستخدم مرجع الطريقة ذلك المثيل في وقت إنشائه:

class Greeter {
    private String prefix;
    Greeter(String prefix) { this.prefix = prefix; }
    String greet(String name) { return prefix + ", " + name + "!"; }
}

Greeter g = new Greeter("Hello");
java.util.function.Function<String, String> greetFn = g::greet;

System.out.println(greetFn.apply("Alice")); // Hello, Alice!
System.out.println(greetFn.apply("Bob"));   // Hello, Bob!

الاستخدام كـ Supplier

تطابق طريقة مثيل بلا معاملات مرتبطة بكائن محدد Supplier<T>:

StringBuilder sb = new StringBuilder("Hello World");
java.util.function.Supplier<String> toString = sb::toString;

System.out.println(toString.get()); // Hello World
sb.append(" !");
System.out.println(toString.get()); // Hello World ! (sb is live)

الاستخدام كـ Predicate

تطابق طرق المثيل التي تعيد قيمة منطقية Predicate عند ربطها بمثيل محدد:

String prefix = "Java";
java.util.function.Predicate<String> startsWith = prefix::equals;
// Hmm, this checks if prefix.equals(candidate).
// More useful:
Predicate<String> startsWithJ = s -> s.startsWith("J");

// But a specific instance Predicate:
StringBuilder pattern = new StringBuilder("hello");
Predicate<String> equalsHello = ((CharSequence)"hello")::equals;
System.out.println(equalsHello.test("hello")); // true
System.out.println(equalsHello.test("world")); // false

نمط المستمع / الاستدعاء اللاحق

تُعد مراجع الطرق على مثيل محدد مثالية لمستمعي الأحداث وعمليات الاستدعاء اللاحقة، إذ تلتقط كائن المعالج تلقائيًا:

class EventHandler {
    void onEvent(String event) {
        System.out.println("Handling: " + event);
    }
}

EventHandler handler = new EventHandler();
List<String> events = List.of("click","hover","submit");
events.forEach(handler::onEvent); // captures the specific handler instance

تطبيقي: مسجّل مرتبط بفئة

اربط مسجّلًا بمثيل محدد من المسجّل لاستخدامه بوصفه Consumer:

import java.util.logging.*;

Logger log = Logger.getLogger("MyApp");

List<String> messages = List.of("Starting","Processing","Done");
messages.stream()
    .map(String::toUpperCase)
    .forEach(log::info); // log is the specific Logger instance

المرجع يلتقط الحالة وقت الربط

تعكس حالة الكائن الظاهرة من خلال المرجع حالته الحية، لا لقطةً لها عند إنشاء المرجع:

List<String> list = new ArrayList<>(List.of("A","B"));
java.util.function.Supplier<Integer> sizeRef = list::size;

System.out.println(sizeRef.get()); // 2
list.add("C");
System.out.println(sizeRef.get()); // 3 (reflects live state)

مقارنة المثيل المحدد بالمثيل العشوائي

يبدو شكلان مختلفان من مراجع الأساليب متشابهين — افهم الفرق بينهما:

// Specific instance: s is captured at binding
String s = "hello";
Predicate<String> p1 = s::equalsIgnoreCase; // String::equalsIgnoreCase bound to 'hello'

// Arbitrary instance: receiver is the stream element
Function<String, String> p2 = String::toUpperCase; // receiver IS the element

حالة استخدام: تفويض الأساليب الآمن للخيوط

اربط أسلوبًا متزامنًا في كائن خدمة بواجهة وظيفية لاستخدامه بأمان بشكل غير متزامن:

class Counter {
    private int count = 0;
    synchronized void increment(String ignored) { count++; }
    int get() { return count; }
}

Counter c = new Counter();
List<String> tasks = List.of("t1","t2","t3");
tasks.forEach(c::increment);
System.out.println(c.get()); // 3

عندما يكون المثيل الملتقط بقيمة null

إذا كان الكائن الملتقط بقيمة null عند إنشاء مرجع الأسلوب، فسيُطرح NullPointerException وقت الاستدعاء، لا وقت الربط:

StringBuilder sb = null;
// Reference is created without error:
java.util.function.Supplier<String> ref = sb::toString;
try {
    ref.get(); // NPE thrown here
} catch (NullPointerException e) {
    System.out.println("NPE at invocation");
}

ملخص المقارنة

مقارنة بين ثلاثة أشكال من مراجع الأساليب:

  • ClassName::staticMethod — ثابت، من دون كائن مستقبِل
  • instance::instanceMethod — مرتبط بكائن محدد
  • ClassName::instanceMethod — العنصر في المسار هو الكائن المستقبِل (مثيل عشوائي)

تحقق سريع

بالنظر إلى EventHandler h = new EventHandler(); list.forEach(h::handle); — ما الكائن المستقبِل لاستدعاء handle لكل عنصر؟

مراجعة: مراجع أساليب المثيل المحدد

أهم النقاط:

  • البنية: instance::methodName — تلتقط كائنًا محددًا
  • الكائن الملتقط هو الكائن المستقبِل في كل استدعاء
  • مناسبة جدًا لعمليات الاستدعاء اللاحق والمستمعين وأنماط التسجيل
  • تظهر الحالة الحية للمثيل الملتقط من خلال المرجع
  • يحدث NPE وقت الاستدعاء إذا كان المثيل بقيمة null، وليس وقت الربط

الأسئلة الشائعة

هل درس «مراجع أساليب الكائن في مثيل محدد» مجاني؟

نعم — نص درس «مراجع أساليب الكائن في مثيل محدد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «مراجع أساليب الكائن في مثيل محدد»؟

التقط كائنًا محددًا وأشر إلى أحد أساليب الكائن فيه لاستخدامه مع callbacks وlisteners تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «مراجع أساليب الكائن في مثيل محدد»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مراجع الأساليب الثابتة
  2. مراجع أساليب الكائن في مثيل محدد
  3. مراجع أساليب الكائنات التعسفية
  4. مراجع المنشئات
← العودة إلى Java Academy