栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java泛型,对象和通配符的差异和说明

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java泛型,对象和通配符的差异和说明

我将列出

T
和之间的主要区别
?

  • 基本:

    T
    是类型参数,
    ?
    是通配符。

  • 含义:

    T
    在定义泛型类时用作类型参数。
    T
    实例化泛型类时,它将被具体类型代替。另一方面,
    ?
    在要引用 未知 类型参数时使用。

  • 定义的地方:您需要

    T
    在类或方法的顶部声明,如果您定义了通用方法。您可以
    ?
    在任何地方 使用。

  • 映射:的每次使用
    T
    都映射到相同的类型(在同一类中)。的每次使用
    ?
    都可以映射为其他类型。
  • 对象实例化:您可以使用通用参数创建对象,
    T
    例如
    new ArrayList<T>()
    。您不能实例化对象,而只能实例化带有的 指针
    ?
  • 集合更新:您可以将对象添加到类型的集合中

    T
    。您不能将对象添加到类型的集合中
    ?
    (因为您不知道其类型)。

  • 类型擦除:对于泛型,类型擦除适用于泛型的 使用 。使用泛型时,它们将转换为编译时检查和执行时强制转换。因此,例如,如果您具有以下代码:

    List<String> myList = new ArrayList<String>();
    然后希望通过执行以下操作将代码添加到列表中
    myList.add("Hello World");
    ,然后
    get
    再添加到刚刚添加的项目中,
    String myString = myList.get(0);
    则编译器会将代码编译为
    List myList = new ArrayList();
    String myString = (String) myList.get(0);
    (由于
    add
    明显的原因,代码保持不变) )。
    因此,基本上,在执行时 没有办法 找出
    T
    本质上是
    String
    用于列表对象的信息(信息消失了)。

现在,对于通配符而言,情况有所不同。通配符(

?
)替换为
Object
(因为它是 无界的 )。这不是很有用。在构建时,编译器将检查您是否
调用
Object
的行为。如果您有类似的内容
? extendsFoo
,则会将
?
其替换为绑定
Foo
(在构建时,编译器将检查您是否仅将
Foo
其子类型(或继承自的类型
Foo
)作为参数传递。

对于

?
Object
T
和之间的差异,
Object
您可以分别在此处和此处阅读。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号