Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

superワイルドカード

ジェネリックについて質問があります。どなたか、教えてください・・・
■super ワイルドカードの疑問点
下記のソースにコンパイルエラーが出るのはなぜでしょうか
class Animal{}
class Cat extends Animal{}

public class Char6_19 {
public static void main(String arg[]){
List<? super Cat> list=new ArrayList<Cat>();
list.add(new Cat());
list.add(new Cat());
for(Cat s:list){ ←コンパイルエラー
 System.out.println(s);
 }
}
}

2

回答

5746

閲覧

2件の回答

評価

0

そもそもワイルドカードつかってるのに add してよかったんだっけ?
SJC-P だとエラーになるって書いてあった気がするんだけど。

super なら Animal s : list とか試してみたら?

評価

0

<? super T>では以下のソースのようなことが成り立つから
for(Cat s:list)はfor(Object s:list)とするしかないですよ。
listへの代入はCat以上でaddはCat以下が成り立ちます。

class Animal{}
class Cat extends Animal{}
class Mike extends Cat{}

public class Char6_19 {
  public static void main(String arg[]){
    List<? super Cat> list=new ArrayList<Cat>();
    list.add(new Cat());
    list.add(new Mike());
    for(Cat s:list){// ←コンパイルエラー
      System.out.println(s);
    }
  }
}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。