当前位置: 首页 > 面试题库 >

如何将元素添加到通配符通用集合?

楮自珍
2023-03-14
问题内容

为什么使用此Java代码会出现编译器错误?

1  public List<? extends Foo> getFoos()
2  {
3    List<? extends Foo> foos = new ArrayList<? extends Foo>();
4    foos.add(new SubFoo());
5    return foos;
6  }

其中“ SubFoo”是实现Foo的具体类,而Foo是接口

我收到此代码错误:

  • 在第3行上:“无法实例化ArrayList <?扩展了Foo>”
  • 在第4行上:“类型List 中的方法add(capture#1-of扩展Foo)不适用于参数(SubFoo)”

更新: 感谢Jeff C,我可以将第3行更改为“ new ArrayList ();”。但是我仍然遇到4号线的问题。


问题答案:

使用此代替:

1  public List<? extends Foo> getFoos()
2  {
3    List<Foo> foos = new ArrayList<Foo>(); /* Or List<SubFoo> */
4    foos.add(new SubFoo());
5    return foos;
6  }

一旦将foos声明为List<? extends Foo>,编译器就不知道添加SubFoo是安全的。如果ArrayList<AltFoo>已将分配给foos怎么办?那将是一个有效的分配,但是添加一个SubFoo会污染该集合



 类似资料:
  • 问题内容: 我希望我选择的功能在将DOM元素添加到页面时运行。这是在浏览器扩展的上下文中,因此该网页独立于我运行,并且我无法修改其来源。我在这里有什么选择? 我猜,从理论上讲,我可以用来不断搜索元素的存在并在元素存在的情况下执行我的操作,但是我需要一种更好的方法。 问题答案: 警告! 这个答案现在已经过时了。DOM级别4引入了MutationObserver,可以有效替代已弃用的突变事件。,以获得

  • 问题内容: 我有一个ArrayList通用通配符类型,它以Number为扩展名。我正在尝试将整数值添加到ArrayList中。 但是它给我一个错误,说 类型中的方法add(int,capture#2-of?)不适用于参数(int)。 我也尝试过这种方式,但是给了我同样的错误 错误是: 类型中的方法add(int,capture#2-of?)不适用于参数(int) 问题答案: 你不能 该部分基本上告

  • 我有一个ArrayList泛型通配符类型,它以Number作为扩展。我试图将整数值添加到ArrayList中。 方法add(int,capture#2-of?)在类型中,不适用于参数(int)

  • 我需要将onclick操作添加到来自notification hub的Toast通知。 我正在开发一个Windows8.1通用应用程序,当用户点击烤面包时,我需要将用户导航到另一个页面

  • 问题内容: 如何将事件添加到元素? 我可以用吗: 为了这? 问题答案: 不,你不能。最简单的方法是将函数调用直接放在元素之后 例: 或者-甚至更好-就在: …因此它不会阻止以下内容的加载。

  • 我将Selenium与PHP WebDriver结合使用。我试图单击导航栏中的链接,该链接显示在HTML中,如下所示: 我正在尝试选择元素,然后单击它。但是,当我尝试使用xpath时,如下所示: 或 我得到以下错误: 没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/*[@showpage=“cards”]”}(会话信息:chrome=70.0.3538.