fbpx

تعلم لغة الجافا – الدرس الثالث عشر Generics



يوفر Generics أمانًا من نوع وقت التجميع الذي يسمح للمبرمجين بالتقاط أنواع غير صالحة في وقت الترجمة.

نظرًا لأن هذه الميزة غالبًا ما تستخدم مع المجموعات ، سنركز على المجموعات. يسمح Generics للمستخدم بتعيين نوع المجموعة لتحديد نوع الكائنات التي يمكن إدراجها في المجموعة. لا يحتاج المستخدم أيضًا إلى إلقاء القيم التي تم الحصول عليها من المجموعة.

عند تعريف Generics ، يجب أن يحتوي على معلمة نوع تحدد نوع العناصر التي ستكون في المجموعة. على سبيل المثال ، للإعلان عن قائمة تحتوي على سلاسل ، ستكتب:

List<String> names = new ArrayList<>();

Generics في تعريف كلاس

يمكنك أيضًا استخدام الوراثة لتعريف الكلاس:

public class YourClass<Class1,Class2>{
    private Class1 bob1;
    private Class2 bob2;
    Abc(Class1 a, Class2 b){
        this.bob1 = a;
        this.bob2 = b;
    }
    public Class1 getBob1() {
        return (this.bob1);
    }
    public Class2 getBob2() {
        return (this.bob2);
    }
}

هذا مفيد عندما تريد أن يكون لديك خيارات متعددة لكلاس المتغيرات في فصلك ، ولكن لا تريد كتابة مُنشئات ووظائف جديدة لكل نوع. يمكنك الآن تشغيل:

YourClass<String, Integer> leBobs = new YourClass<>("words",42);  //في هذه الحالة ، <> يماثل وضع <String، Integer>

String a=leBobs.getBob1();
int b=leBobs.getBob2();
System.out.println("bob1 is '" + a + "', and bob2 is '" + b + "'.");

لتغيير أنواع bob1 و bob2 فقط قم بتغيير الكلاس في <> عندما تقوم بتعريف كائن من كلاس YourClass.

ملحوظة: لا يمكنك استخدام البدائية للوراثة إلا إذا كنت تستخدم نسختهم من الفصل:

أي < int Integer> أو < bool Boolean>

تمرين

قم بإصلاح كلاس FavoriteClasses لاستخدام الوراثة البديلة لثلاثة متغيرات ، المفضلة 1 ، والمفضلة 2 ، والمفضلة 3 ، وهي منشئ ، وهي ثلاث وظائف لإرجاع كل متغير ، بالإضافة إلى إصلاح r في main.

ثم قم بتعريف متغير من كلاس FavoriteClasses واستخدم “Hello” ، 67 ، 6.3 كوسيطة للمنشئ ، وعندما تقوم بتعريفه ، استخدم الكلاس / الأنواع المفضلة التي تتوافق مع الوسائط الثلاثة.

import java.util.*;
public class Main{
    public static class FavoriteClasses{
        private favorite1;
        private favorite2;
        private favorite3;
        FavoriteClasses(fav1, fav2, fav3){
            this.favorite1=fav1;
            this.favorite2=fav2;
            this.favorite3=fav3;
        }
        public getFav1(){
            return(this.favorite1);
        }
        public getFav2(){
            return(this.favorite2);
        }
        public getFav3(){
            return(this.favorite3);
        }
    }
    public static main(String[] args){
        List r=new ArrayList();
        r.add(6.3);
        r.add(5.9);
        FavoriteClasses a=new FavoriteClasses("Hello",67,r.get(0));
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
    }
}

الحل

import java.util.*;
public class Main{
    public static class FavoriteClasses<ClassA,ClassB,ClassC>{
        private ClassA favorite1;
        private ClassB favorite2;
        private ClassC favorite3;
        FavoriteClasses(ClassA fav1, ClassB fav2, ClassC fav3){
            this.favorite1=fav1;
            this.favorite2=fav2;
            this.favorite3=fav3;
        }
        public ClassA getFav1(){
            return(this.favorite1);
        }
        public ClassB getFav2(){
            return(this.favorite2);
        }
        public ClassC getFav3(){
            return(this.favorite3);
        }
    }
    public static main(String[] args){
        List<Float> r=new ArrayList<>();     //يمكن أن تكون مزدوجة أو أي أخرى تدعم الكسور العشرية
        r.add(6.3);
        r.add(5.9);
        FavoriteClasses<String, Integer, Float> a=new FavoriteClasses<>("Hello",67,r.get(0)); //نفس الشيء مع int
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
    }
}

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

Main.java:22: error: invalid method declaration; return type required
    public static main(String[] args){
                  ^
Main.java:27: error: ')' expected
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
                                                                   ^
Main.java:27: error: illegal start of expression
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
                                                                     ^
Main.java:27: error: ';' expected
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
                                                                             ^
Main.java:27: error: not a statement
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
                                                                                                         ^
Main.java:27: error: ';' expected
        System.out.println("My favorites are " + a.getFav1() + ", " a.getFav2() + ", and " + a.getFav3() + ".");
                                                                                                              ^
6 errors

الدرس الرابع عشر






Leave a Reply