Java 带下界的嵌套通配符
因此,我通读了主要的Java通用FAQ,唯一让我感到困扰的是带下限的嵌套通配符。我想给你们一个我确实理解的例子,一些具体有效的东西,以及我如何看待它。也许你可以告诉我,我对这个问题的看法是错误的,即使编译器在“好”的情况下没有抱怨 示例1(有意义):Java 带下界的嵌套通配符,java,generics,wildcard,Java,Generics,Wildcard,因此,我通读了主要的Java通用FAQ,唯一让我感到困扰的是带下限的嵌套通配符。我想给你们一个我确实理解的例子,一些具体有效的东西,以及我如何看待它。也许你可以告诉我,我对这个问题的看法是错误的,即使编译器在“好”的情况下没有抱怨 示例1(有意义): static void WildcardsMethod(List<? extends Pair<? extends Number>> list) { System.out.println("It worked");
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
是ListPair
的一个子类型,而不是PairWhy是Pair
的子类型,我认为让我感到不舒服的是,我在想的是一个个碎片。在处理这一级别的嵌套卡片时,你必须考虑整个通配符表达式。例如,?extenddsPair@Codebender:Foo
是Foo的一个子类型