Rumah >Java >javaTutorial >Apakah extends T dan super T dalam Java?
9d2765459de79669203dc2fefe6ee69e 🎜 >
List<? extends Father> list = new LinkedList<Son>(); list.add(new Son());Walaupun anda menentukan jenis Son, anda tidak boleh menambah objek Son menggunakan kaedah tambah. Mengapakah kelas Bapa dan subkelas kelas Bapa tidak boleh ditambahkan pada senarai Mari kita analisanya. Senarai8accd8a1ce888f6469952d6a43b744c5 bermakna had atas ialah Bapa, dan tugasan berikut adalah sah
List<? extends Father> list1 = new ArrayList<Father>(); List<? extends Father> list2 = new ArrayList<Son>(); List<? extends Father> list3 = new ArrayList<LeiFeng>();Jika Senaraib71257a79456ff8c972da28a72489888 dan parameter jenis ialah kepada pengkompil, semua T mewakili jenis yang sama. Contohnya, dalam kaedah generik berikut, ketiga-tiga T semuanya merujuk kepada jenis yang sama, sama ada String atau Integer.
public <T> List<T> fill(T... t);
List<? extends Father> list1 = getFatherList();//getFatherList方法会返回一个Father的子类的listSelain itu, memandangkan kami telah memastikan bahawa apa yang disimpan dalam Senarai ialah kelas Bapa atau salah satu subkelasnya, anda boleh menggunakan kaedah get untuk mendapatkan nilai secara terus:
List<? extends Father> list1 = new ArrayList<>(); Father father = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。 Object object = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。 Human human = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。 Son son = (Son)list1.get(0);Lower Bound< ;? super T> tidak menjejaskan storan masuk, tetapi pengambilan keluar hanya boleh diletakkan dalam objek Object Sempadan bawah diisytiharkan dengan super, menunjukkan bahawa jenis parameter mungkin yang ditentukan jenis, atau jenis ini Jenis ibu bapa, sehingga Objek.
//super只能添加Father和Father的子类,不能添加Father的父类,读取出来的东西只能存放在Object类里 List<? super Father> list = new ArrayList<>(); list.add(new Father()); list.add(new Human());//compile error list.add(new Son()); Father person1 = list.get(0);//compile error Son son = list.get(0);//compile error Object object1 = list.get(0);Oleh kerana sempadan bawah menentukan had bawah kebutiran minimum elemen, ia sebenarnya melonggarkan kawalan jenis elemen bekas. Memandangkan elemen itu ialah kelas asas Bapa, ia boleh disimpan dalam butiran yang lebih kecil daripada Bapa. Atas sebab keselamatan jenis, kita boleh menambah objek Bapa atau mana-mana subkelasnya (seperti Son Walau bagaimanapun, kerana pengkompil tidak mengetahui superclass Bapa kandungan Senarai itu, ia tidak dibenarkan untuk menambah mana-mana superclass tertentu). . Kelas (seperti Manusia). Dan apabila kita membacanya, pengkompil hanya boleh mengembalikan objek Objek tanpa mengetahui jenisnya, kerana Objek ialah kelas nenek moyang muktamad bagi mana-mana kelas Java. Tetapi dalam kes ini, semua jenis maklumat elemen hilang. Prinsip PECSAkhir sekali, mari kita lihat apakah prinsip PECS (Producer Extends Consumer Super) yang sudah difahami dengan baik: Baca dengan kerap Untuk kandungan, adalah sesuai untuk menggunakan sempadan atas Extends. Bagi yang kerap menyelitkannya, Nether Super sesuai.
Atas ialah kandungan terperinci Apakah extends T dan super T dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!