فئات الغلاف (Wrapper Classes)
| English | العربية |
|---|---|
| wrapper class/ˈræpə klæs/ | صف الغلاف |
| autoboxing/ˌɔːtəʊˈbɒksɪŋ/ | التغليف التلقائي |
| unboxing/ʌnˈbɒksɪŋ/ | الإزالة التلقائية للتغليف |
تغليف العنصر الأولي
- بعض هياكل Java (مثل
ArrayList) تحتفظ بـ كائنات، وليست عناصر أولية. - كلاس الغلاف يحيط بالنوع البدائي في كائن:
Integerيحيط بـint، و**Double** يحيط بـdouble. Integer boxed = Integer.valueOf(5);يضعint5داخل كائن.- تسمح الفئات المغلفة للعناصر الأولية بالعيش حيثما تُسمح بالكائنات فقط.
التغليف التلقائي وإزالة التغليف
- تقوم Java بالتحويل تلقائياً — التغليف التلقائي وإزالة التغليف.
Integer x = 5;يقوم بالتغليف التلقائي (autoboxing) لـ5؛ وint y = x;يقوم بفك التغليف (unboxing) إياه مرة أخرى.- لذلك يعمل
list.add(5)حتى القائمة تحتوي على كائناتInteger. - نادراً ما تكتب
Integer.valueOfيدوياً — التغليف التلقائي يقوم بذلك.
لماذا تحتاج ArrayList إليها
ArrayList<Integer>يحتوي على كائناتInteger، لأن التوليد العام (generics) يتطلب نوعاً مرجعياً.- لا يمكنك كتابة
ArrayList<int>— العناصر الأولية ليست كائنات. - يسمح التغليف التلقائي بإضافة وقراءة
intعادية بسهولة. Double،Boolean، إلخ، تلعب نفس الدور لعناصرها الأولية.
مقارنة الفئات المغلفة مع equals
- يجب مقارنة كائني
Integerباستخدام.equals()، وليس==. ==يقارن المرجعات؛.equals()يقارن القيم المغطاة.- (تقوم Java بتخزين Integers الصغيرة في الذاكرة المؤقتة، لذا قد تبدو
==وكأنها تعمل أحياناً — لا تعتمد على ذلك.) - نفس قاعدة "استخدم
.equals()للكائنات" منStringتنطبق هنا.
الفئات المغلفة هي كائنات، لذا قارن قيمها باستخدام .equals()، لا ==. == يختبر هوية المرجع؛ بالنسبة لكائني Integer بنفس القيمة يمكن أن تكون false. ولا يمكنك تمرير مجموعة بعنصر أولي — إنها ArrayList<Integer>، لا ArrayList<int> أبداً. يربط التغليف التلقائي الفجوة بحيث لا تزال قادراً على إضافة int عادية.
الفئات المغلفة مع ArrayList:
ArrayList<Integer> nums = new ArrayList<Integer>();nums.add(5);— يتم التغليف التلقائي لـint5إلىInteger.int first = nums.get(0);— يتم إزالة التغليف منIntegerعائداً إلىint.
فئة الغلاف (Integer، Double، Boolean) تغلف عنصراً أولياً في كائن لكي يمكن وضعه حيثما تُطلب الكائنات — مثل ArrayList<Integer> (لا يمكنك كتابة ArrayList<int>). التغليف التلقائي وإزالة التغليف يحولان تلقائياً. قارن كائنات الغلاف باستخدام .equals()، لا ==.
التغليف (Autoboxing) والتفكيك (unboxing)
تحويلات int ↔ Integer تحدث تلقائيًا.
أي فئة غلاف تغلف int؟
Integer تغلف int؛ Double تغلف double.
لماذا يجب الإعلان عن ArrayList من ints على أنها ArrayList
لا يمكنك كتابة ArrayList
يجب مقارنة كائني Integer باستخدام...
فئات الغلاف هي كائنات — استخدم .equals() لقيمتها.
في nums.add(5)، يتم تغليف int 5 تلقائيًا إلى Integer (autoboxing).
التغليف التلقائي يحول القيمة الأولية إلى كائن غلاف.
الفئة التي تغلف نوعًا أوليًا في كائن هي فئة ___ (كلمة واحدة).
Integer و Double و Boolean هي فئات تغليف.