ジェネリックスの上下限でいくつかのサンプルプログラムを試していました。ジェネリックス上限はコンパイルエラーです...しかし、下限は問題ありません。 タイプTのリストをセットに入れて、上限と下限の両方のシナリオを試してみようとしています..ジェネリックス上のワイルドカードでコンパイルエラーが発生する
testUpperBound(T t)メソッドの問題を特定するのに役立ちます。なぜtestLowerBound t)メソッドをコンパイルし、testUpperBound(T t)メソッドはコンパイルしません。私は他の同様のスレッドをチェックしました。しかし、まだ私はそれを明確にしていません。
詳細が必要な場合はお知らせください。
public class TestGenerics<T>
{
public static void main(String...args)
{
List<String> list = new ArrayList<>();
list.add("New ArrayList");
new TestGenerics<List<String>>().testUpperBound(list);
new TestGenerics<List<String>>().testLowerBound(list);
}
public void testLowerBound(T t)
{
Set<? super ArrayList<T>> lowerBoundSet = new HashSet<>();
lowerBoundSet = new HashSet<List<T>>();
ArrayList<T> list = new ArrayList<>();
list.add(t);
lowerBoundSet.add(list); // compiles..
out.println(lowerBoundSet);
}
public void testUpperBound(T t)
{
Set<? extends List<T>> upperBoundSet = new HashSet<>();
upperBoundSet = new HashSet<List<T>>();
ArrayList<T> list = new ArrayList<>();
list.add(t);
upperBoundSet.add(list); // Doesn't compile..
out.println(upperBoundSet);
}
}
恐ろしい:) ..最終的に私はそれを明らかにした....デイヴィッドに感謝! 。感謝し、答えを受け入れました。 –