Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带下界的嵌套通配符_Java_Generics_Wildcard - Fatal编程技术网

Java 带下界的嵌套通配符

Java 带下界的嵌套通配符,java,generics,wildcard,Java,Generics,Wildcard,因此,我通读了主要的Java通用FAQ,唯一让我感到困扰的是带下限的嵌套通配符。我想给你们一个我确实理解的例子,一些具体有效的东西,以及我如何看待它。也许你可以告诉我,我对这个问题的看法是错误的,即使编译器在“好”的情况下没有抱怨 示例1(有意义): static void WildcardsMethod(List<? extends Pair<? extends Number>> list) { System.out.println("It worked");

因此,我通读了主要的Java通用FAQ,唯一让我感到困扰的是带下限的嵌套通配符。我想给你们一个我确实理解的例子,一些具体有效的东西,以及我如何看待它。也许你可以告诉我,我对这个问题的看法是错误的,即使编译器在“好”的情况下没有抱怨

示例1(有意义):

static void WildcardsMethod(List<? extends Pair<? extends Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Integer>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? extends Pair<? super Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Number>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? super Pair<? super Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Object>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? super Pair<? extends Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Integer>> list = null;
    WildcardsMethod(list);
}

静态无效通配符方法(列表示例1:

static void WildcardsMethod(List<? extends Pair<? extends Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Integer>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? extends Pair<? super Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Number>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? super Pair<? super Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Object>> list = null;
    WildcardsMethod(list);
}
static void WildcardsMethod(List<? super Pair<? extends Number>> list)
{
    System.out.println("It worked");
}

static void TestWildcardsMethod()
{
    List<Pair<Integer>> list = null;
    WildcardsMethod(list);
}

  • List
    List
    Pair
    的一个子类型,而不是
    PairWhy是
    Pair
    的子类型,我认为让我感到不舒服的是,我在想的是一个个碎片。在处理这一级别的嵌套卡片时,你必须考虑整个通配符表达式。例如,
    ?extenddsPair@Codebender:
    Foo
    Foo的一个子类型