加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

通配符如何在Java中工作

发布时间:2020-12-15 00:55:59 所属栏目:Java 来源:网络整理
导读:我正在阅读关于泛型中的通配符的 java教程.在以下代码中: void printCollection(CollectionObject c) { for (Object e : c) { System.out.println(e); }} 这是否意味着集合c将类型对象作为其元素,我们不能调用c.add(“apple”), 因为“apple”是一个字符串
我正在阅读关于泛型中的通配符的 java教程.在以下代码中:
void printCollection(Collection<Object> c) {
    for (Object e : c) {
        System.out.println(e);
    }
}

这是否意味着集合c将类型对象作为其元素,我们不能调用c.add(“apple”),
因为“apple”是一个字符串而for循环从集合c中获取任何对象元素?

但我不明白以下代码,

void printCollection(Collection<?> c) {
    for (Object e : c) {
        System.out.println(e);
    }
}

此代码使用通配符,表示“元素类型与任何内容匹配的集合”.这是否意味着我们可以添加任何类型的对象,例如c.add(“string”);,
c.add(1);和c.add(new apple()); ?
并且for循环从集合c中获取任何对象e,如果c不是对象类型,我们说c的元素是Integer.这段代码有效吗?这是否意味着它应该被施放?

解决方法

你几乎完全倒退了.

集合< Object>可以包含它的Object和子类,并且由于所有东西(包括String)都是Object的子类,因此您可以向此类集合添加任何内容.但是,您不能对其内容做任何假设,除非它们是对象.

另一方面,A Collection<?>仅包含特定未知类型(及其子类)的实例,但由于您不知道它是哪种类型,因此您不能向此类集合添加任何内容(null除外),也不能对其中的任何内容进行任何假设(除了它们之外) ‘对象,因为一切都是).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读