Java泛型--extensとsuper>
Java泛型--目次
概要はタイプの上界を表し、パラメータ化タイプの可能性がTまたはTのサブクラス を表しています。は、タイプ下界を表し、パラメータ化タイプがこのタイプの超タイプ(親タイプ)であることを示し、Object まで
具体的な説明は次の例に参加してください。list 1は、あるタイプのオブジェクトしか入手できません。その中にFlut、Orange、さらにAppleのインスタンスを追加できないのは、なぜですか?そうですかexpends Appleの意味はAppleまたはAppleのサブクラスです。これは不確定なタイプです。Listはどのタイプのオブジェクトを入れるべきか分からないので、どのタイプのオブジェクトを追加してもいけません。
Listlist 2は、Apple、HFSF AppleなどのAppleとそのサブクラスを追加することができますが、Appleの親クラスを追加することはできません。list 2のオブジェクトを取得する時はObjectしかできません。これはなぜですか?もとはsuper AppleはAppleまたはAppleの親類を表しています。Objectまでは、範囲があるなら、この範囲にAppleまたはAppleのサブクラスを追加してもいいですが、取得時には限られた範囲がありますので、list 2は具体的に持つべきタイプが何なのか分かりません。
リスト3は簡単に表現しましたか?super Appleの応用シーン、
次のようにまとめます。 extensで使用できるリターンタイプは、パラメータタイプの定義には使用できません。 superは、パラメータタイプによって定義されることができ、リターンタイプによって定義されることができない。 eg:
ここまで話してください。その中の奥秘が分かりました。ここで問題を出します。次の二つの例に注釈されたreturn文はなぜ新聞をコンパイルしたかを説明してください。
概要
具体的な説明は次の例に参加してください。
public class SuperExtneds {
public static void main(String[] args) {
List<? extends Apple> list1 = getExtendsAppleList();
Apple first = list1.get(0);
list1.add(null);
first.sayHello();
//
//list.add(new Fruit());
//list.add(new Apple())
//list.add(new Object());
List<? super Apple> list2 = getSupperAppleList();
list2.add(new Apple());
list2.add(new HFSApple());
// obj
Object item = list2.get(0);
//
//Fruit aa1 = list2.get(0);
//Apple aa2 = list2.get(0);
//HFSApple aa3 = list2.get(0);
//Orange aa4 = list2.get(0);
//list2.add(new Fruit());
List<Fruit> list3 = new ArrayList<>();
handlerApple(list3);
list3.get(0).sayHello();
}
public static List<? extends Apple> getExtendsAppleList() {
List<Apple> appleList = new ArrayList<>();
appleList.add(new Apple());
appleList.add(new HFSApple());
//
//return new ArrayList<Fruit>();
return appleList;
}
public static List<? super Apple> getSupperAppleList() {
List<Fruit> fruitList = new ArrayList<>();
fruitList.add(new Fruit());
fruitList.add(new Orange());
//
//return new ArrayList<HFSApple>();
return fruitList;
}
public static void handlerApple(List<? super Apple> list) {
list.add(new HFSApple());
list.add(new Apple());
//
//list.add(new Fruit());
//list.add(new Orange());
}
}
class Fruit {
public void sayHello() {
System.out.println("hello");
}
}
class Apple extends Fruit {
}
class HFSApple extends Apple {
}
class Orange extends Fruit {
}
ListList
リスト3は簡単に表現しましたか?super Appleの応用シーン、
次のようにまとめます。
ここまで話してください。その中の奥秘が分かりました。ここで問題を出します。次の二つの例に注釈されたreturn文はなぜ新聞をコンパイルしたかを説明してください。
public static List<? extends Apple> getExtendsAppleList() {
List<Apple> appleList = new ArrayList<>();
appleList.add(new Apple());
appleList.add(new HFSApple());
//
//return new ArrayList<Fruit>();
return appleList;
}
public static List<? super Apple> getSupperAppleList() {
List<Fruit> fruitList = new ArrayList<>();
fruitList.add(new Fruit());
fruitList.add(new Orange());
//
//return new ArrayList<HFSApple>();
return fruitList;
}