2016-07-13 28 views
-1
public class HelloWorld{ 

public static void main(String[] args) { 

    List<? extends Number> callback = new ArrayList<Long>(); 
    new Container<>().test(callback); 
} 

public static class Container<T extends Number> { 

    public void test(List<T> some) { 

    } 

} 

}ジェネリック - 互換性のない型

このコードは

HelloWorld.java:7: error: incompatible types: List<CAP#1> cannot be converted to List<Number>                                       
     new Container<>().test(callback);                                                    
          ^                                                      
    where CAP#1 is a fresh type-variable:                                                     
    CAP#1 extends Number from capture of ? extends Number 

を生産するが、あなたは、このコードが間違って詳細に説明することができます。

I新しいコンテナがコールバックまず

+3

'String'は' final'クラスなので、多少意味がありません。 – Bohemian

+1

@Bohemianそれが数字 – gstackoverflow

+0

であると想像してください。その場合、ジェネリックでは 'Number'を使用する妥当な理由がありますが、' String'ではそれほど多くないので、 'Number'を使用してください。 – Makoto

答えて

1

と互換性のある型に一般化することを期待、StringとしてStringが最終クラスで延びているタイプが存在することはできません。

あなたListに使用するタイプ? extends SomeTypeあなたはContainerクラスで使用T extends SomeTypeと同じタイプなので、それはエラーが発生した場合第二に、コンパイラが判断することはできません。あなたがする必要があるだろう何

は、メソッドのシグネチャでジェネリック型を宣言し、ListContainerの両方のために、そのタイプを使用するかである:

public <T extends SomeClass> void example() { 
    List<T> callback = new ArrayList<>(); 
    new Container<T>().test(callback); 
} 

または非有界タイプのリストを宣言します。

List<SomeClass> callback = new ArrayList<>(); 
new Container<>().test(callback); 
+0

ええ、それは本当です+1 +1 –

+0

あなたは*非境界型*のリストを宣言したと思いますか? – Bohemian

+0

@ボヘミアンはい、私の悪い – explv

0

まあ、ジェネリックを使用しています。コンテナを定義すると、コンテナのデフォルトのコンストラクタに、Stringのインスタンスである型をサポートしなければならないことが通知されます。 ここで正しい例は、StringはObjectのサブクラスなので、私はそれを使用します。

public class HelloWorld{ 

    public static void main(String[] args) { 

     List<String> callback = new ArrayList<String>(); 
     new Container<String>().test(callback); 
    } 

    public static class Container<T extends Object> { 

     public void test(List<T> some) { 

     } 

    } 
} 

私はこれがあなたを助けてくれることを願っています。

関連する問題