Java 使用泛型和通配符创建作为嵌套列表的静态字段

Java 使用泛型和通配符创建作为嵌套列表的静态字段,java,generics,static-members,nested-lists,bounded-wildcard,Java,Generics,Static Members,Nested Lists,Bounded Wildcard,这个问题是关于嵌套列表的,嵌套列表是泛型类的一个静态字段。如果我使用以下代码在类中的静态变量中维护日志: static List<List<? extends Number>> myLog = new ArrayList<List<? extends Number>>(); 现在,不要使用(如评论中所述) 类型确定和检查后,类型擦除会出现 在您的代码中,您描述了myLog的类型和inList的类型,因此编译器可以在编译时确定类型是否匹配(在这两种

这个问题是关于嵌套列表的,嵌套列表是泛型类的一个静态字段。如果我使用以下代码在类中的静态变量中维护日志:

static List<List<? extends Number>> myLog = new ArrayList<List<? extends Number>>();
现在,不要使用
(如评论中所述)

类型确定和检查后,类型擦除会出现

在您的代码中,您描述了
myLog
的类型和
inList
的类型,因此编译器可以在编译时确定类型是否匹配(在这两种情况下都匹配),从而强制执行类型

然后发生类型擦除,类型在运行时丢失(如果您将
myLog
作为
List
获取,您可以
add
任何需要的内容,就像您将其描述为
static List myLog
)一样。它们并没有完全丢失:元数据/refelction可以为您提供这些信息,但它们不再强制执行,就像编译器那样。

(如评论中所述)

类型确定和检查后,类型擦除会出现

在您的代码中,您描述了
myLog
的类型和
inList
的类型,因此编译器可以在编译时确定类型是否匹配(在这两种情况下都匹配),从而强制执行类型


然后发生类型擦除,类型在运行时丢失(如果您将
myLog
作为
List
获取,您可以
add
任何需要的内容,就像您将其描述为
static List myLog
)一样。它们并没有完全丢失:元数据/refelction可以为您提供这些信息,但它们不再强制执行,就像编译器所做的。

听起来你不太确定你在问什么。试着想清楚,然后问一个具体的问题,我们就能更好地提供帮助。我已经编辑了这个问题。希望我能理解一点!类型擦除发生在类型确定之后。“那么,如何在编译时确定顶级列表(ArrayList)中的嵌套列表(“列表”接口)的实际实现类型?”您是指
List@Asoub是的,请。听起来你好像不太确定你在问什么。试着想清楚,然后问一个具体的问题,我们就能更好地提供帮助。我已经编辑了这个问题。希望我能理解一点!类型擦除发生在类型确定之后。“那么,如何在编译时确定顶级列表(ArrayList)中的嵌套列表(“列表”接口)的实际实现类型?”您是指
List@Asoub好的,谢谢。
public void sortList(List<? extends Number> inList) {
    // do something
    myLog.addLast(inList);
    // do some more
}