【问题标题】:When using ArrayList(Collection<? extends E> c) for a copy constructor I get two errors将 ArrayList(Collection<? extends E> c) 用于复制构造函数时,出现两个错误
【发布时间】:2020-01-26 02:32:47
【问题描述】:
public ListArrayListBased(ListArrayListBased < E > var) 

{

items = new ArrayList < E> (ArrayList(ListArrayListBased 
        < ? extends E > var));

}

使用这行代码会给我两个错误。

  1. 此位置不允许使用通配符。
  2. 标记“ListArrayListBased”上的语法错误,:: 应在标记之后。

我能够通过在 ListArrayListBased 之后放置 :: 来修复第二个,但我不知道它做了什么或它是如何工作的。我正在寻找更多关于错误的解释,然后是问题的解决方案。谢谢!

【问题讨论】:

  • 我不确定你想在这里做什么。如果您只希望 items 成为您的列表参数的副本,请使用 items = new ArrayList&lt;&gt;(var);。 (此外,var 是 Java 10 的语言关键字,因此您需要避免将其用作变量名。)
  • ArrayList(ListArrayListBased&lt; ? extends E &gt; var) 应该是什么?这不是方法调用。或方法声明。或者演员表。或者我能想到的任何其他东西。
  • 当我使用 items = ArrayList(var) 时出现错误,“构造函数 ArrayList(ListArrayListBased) 未定义。
  • 顺便说一句,不要命名变量var。除了它是一个非常模糊的名称之外,它还是 Java 11+ 中的一个(某种)关键字。

标签: java arraylist copy-constructor containment


【解决方案1】:

这是一个复制构造函数,您正在尝试分配 items 成员变量,这可能是您类中的列表。

所以,从var 复制items 列表:

items = new ArrayList<>(var.items);

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 2023-04-01
    • 2018-11-15
    • 2016-03-05
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多