在Java泛型中降低有界WildCard

时间:2013-06-19 06:46:57

标签: java generics

import java.util.ArrayList;
import java.util.List;
import java.util.Collection;

public class LowerBoundedWildCard {
    public static void display(Collection<? super Integer> ints, int n) {
        for (int i = 0; i < n; i++) {
            ints.add(i);
        }
    }

    public static void main(String[] args) {

        List<Number> numList = new ArrayList<Number>();
        display(numList, 5); // Error
        numList.add(19.43); // Error
        }
   }

List<Integer>List<? super Integer>更具限制性,因为前者仅匹配Integer类型的列表,而后者匹配任何类型为Integer的超类型的列表。 Number是Integer和double的超类型,那么为什么会出现这个错误?

请帮我解决上述问题。

1 个答案:

答案 0 :(得分:2)

我尝试了代码并且没有错误。我甚至可以毫无问题地打印清单:

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class Test
{
    public static void display(Collection<? super Integer> ints, int n) {
        for (int i = 0; i < n; i++) {
            ints.add(i);
        }
    }

    public static void main(String[] args) {

        List<Number> numList = new ArrayList<Number>();
        display(numList, 5);
        numList.add(19.43);
        System.out.println( "numList = " + numList );
    }

}

输出:

numList = [0, 1, 2, 3, 4, 19.43]