Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

Javaمثال حول تعريف Generic Class و إنشاء كائن منه في جافا

في المثال التالي قمنا بتعريف كلاس إسمه Box, يملك نوع بيانات مجهول رمزنا له بالحرف T.
في هذا الكلاس قمنا بتعريف متغير إسمه x نوعه T.

ثم قمنا ببناء دوال للتعامل مع المتغير x:

  • الدالة getX()تستخدم لجلب قيمة المتغير x.
  • الدالة setX()تستخدم لتحديد قيمة المتغير x.

في الأخير قمنا بإنشاء الكلاس Main لتجربة إنشاء كائنات من الكلاس Box.


عند إنشاء كائن من الكلاس Box في حال لم تقم بوضع كلاس مكان الحرف <T> سيتم إعتبار x من النوع Object.
أما في حال قمت بوضع كلاس مكان الحرف <T>, سيتم تبديل جميع الأحرف T الموجودة في الكلاس Box بإسم الكلاس الذي أدخلته مكانها.


Box.java
public class Box <T> {
 
    private T x;
 
    public void set(T x) {
        this.x = x;
    }
 
    public T get() {
        return x;
    }
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // يمكنه تخزين أي نوع بيانات objectBox إسمه Box هنا قمنا بتعريف كائن من الكلاس
        Box objectBox = new Box();
 
        // Object ملاحظة سيتم تخزين النص كـ .x سيتم تخزين هذه القيمة في المتغير .String هنا أدخلنا فيه قيمة نوعها
        objectBox.set( "object type can store any type of data" );
 
        // أيضاً Object القيمة التي سترجع هنا يكون نوعها .x هنا قمنا بإرجاع القيمة التي تم تخزينها في المتغير
        System.out.println("objectBox contains: " + objectBox.get());
 
        // أيضاً Object مكان القيمة السابقة, و سيتم تخزينها كـ x سيتم تخزين هذه القيمة في المتغير .Integer هنا أدخلنا فيه قيمة نوعها
        objectBox.set( 1234 );
 
        // أيضاً Object القيمة التي سترجع هنا يكون نوعها .x هنا قمنا بإرجاع القيمة التي تم تخزينها في المتغير
        System.out.println("objectBox contains: " + objectBox.get());
 
 
 
        // Integer يمكنه فقط تخزين قيم نوعها integerBox إسمه Box هنا قمنا بتعريف كائن من الكلاس
        Box<Integer> integerBox = new Box();
 
        // أيضاً Integer و الذي أصبح نوعه x سيتم تخزين هذه القيمة في المتغير .Integer هنا قمنا بإدخال قيمة فيه نوعها
        integerBox.set( 100 );
 
        // أيضاً Integer القيمة التي سترجع هنا يكون نوعها .x هنا قمنا بإرجاع القيمة التي تم تخزينها في المتغير
        System.out.println("integerBox contains: " + integerBox.get());
 
 
 
        // String يمكنه فقط تخزين قيم نوعها stringBox إسمه Box هنا قمنا بتعريف كائن من الكلاس
        Box<String> stringBox = new Box();
 
        // أيضاً String و الذي أصبح نوعه x سيتم تخزين هذه القيمة في المتغير .String هنا قمنا بإدخال قيمة فيه نوعها
        stringBox.set( "Hello, my type is String" );
 
        // أيضاً String القيمة التي سترجع هنا يكون نوعها .x هنا قمنا بإرجاع القيمة التي تم تخزينها في المتغير
        System.out.println("stringBox contains: " + stringBox.get());
 
    }
 
}

سنحصل على النتيجة التالية عند التشغيل.

objectBox contains: object type can store any type of data
objectBox contains: 1234
integerBox contains: 100
stringBox contains: Hello, my type is String

إذاً نقوم بتعريف الكلاس كـ Generic عندما يكون عندنا عمليات في هذا الكلاس تطبق على أكثر من نوع.
فبدل إنشاء كلاس للتعامل مع كل نوع على حدة, نعرف الكلاس كـ Generic , و نحدد النوع الذي نريد التعامل معه أثناء إنشاء كائن من هذا الكلاس.