相关疑难解决方法(0)

原始类型,无界外卡和泛型中使用Object之间的区别是什么

我正在阅读有效Java中关于泛型的章节.

帮助我理解之间的区别Set,Set<?>以及Set<Object>

以下段落摘自本书.

作为快速回顾,Set<Object>是一个参数化类型,表示一个可以包含任何类型的对象的集合,Set<?>是一个表示一个集合的通配符类型,它只能包含某些未知类型的对象,并且Set是一个原始类型,它选择了泛型类型系统.

什么是"某种未知类型"?是所有未知类型的类型Object?在那种情况下,Set<?>和之间的具体区别是Set<Object>什么?

java generics effective-java

25
推荐指数
1
解决办法
2694
查看次数

无法从List <List>转换为List <List <?>>

原始列表转换为List<?>正常.为什么原始列表列表不能转换为列表List<?>

{   // works
    List raw = null;
    List<?> wild = raw;
}
{   // Type mismatch: cannot convert from List<List> to List<List<?>>
    List<List> raw = null;
    List<List<?>> wild = raw;
}
Run Code Online (Sandbox Code Playgroud)

背景故事(缓解xy问题):

我正在使用的API返回List<JAXBElement>.我碰巧知道它总是如此List<JAXBElement<String>>.我计划循环并构建自己的List<String>,但我在写时试图修复(但不是抑制)原始类型编译器警告List<JAXBElement> raw = api();.

我试过了:

List<JAXBElement<?>> raw = api();
List<JAXBElement<?>> raw = (List<JAXBElement<?>>) api();
Run Code Online (Sandbox Code Playgroud)

但这些给出了类型不匹配错误.

有趣的是,这没有任何警告或错误:

for (JAXBElement<?> e : api()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

java generics casting raw-types unbounded-wildcard

25
推荐指数
1
解决办法
2561
查看次数

泛型中的原始类型与<?>之间的区别

它可能会被问到某个地方,但我找不到它.

请告诉我两者之间的确切区别:

ArrayList list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

ArrayList<?> list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这两者之间的确切区别.

谢谢...

java generics collections

6
推荐指数
1
解决办法
3089
查看次数