Javaمثال حول تعريف Generic Class و إنشاء كائن منه في جافا
في المثال التالي قمنا بتعريف كلاس إسمه Box
, يملك نوع بيانات مجهول رمزنا له بالحرف T
.
في هذا الكلاس قمنا بتعريف متغير إسمه x
نوعه T
.
ثم قمنا ببناء دوال للتعامل مع المتغير x
:
- الدالة
getX()
تستخدم لجلب قيمة المتغيرx
. - الدالة
setX()
تستخدم لتحديد قيمة المتغيرx
.
في الأخير قمنا بإنشاء الكلاس Main
لتجربة إنشاء كائنات من الكلاس Box
.
عند إنشاء كائن من الكلاس Box
في حال لم تقم بوضع كلاس مكان الحرف <T>
سيتم إعتبار x
من النوع Object
.
أما في حال قمت بوضع كلاس مكان الحرف <T>
, سيتم تبديل جميع الأحرف T
الموجودة في الكلاس Box
بإسم الكلاس الذي أدخلته مكانها.
public class Box <T> { private T x; public void set(T x) { this.x = x; } public T get() { return x; } }
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 , و نحدد النوع الذي نريد التعامل معه أثناء إنشاء كائن من هذا الكلاس.