将列表分配给另一个类的现有列表的值

时间:2014-03-05 13:11:21

标签: java

我想创建一个列表实例,并从另一个类中分配给相同类型列表的值。

要复制的原始变量在这里

class A {
     List<String> copy = new ArrayList<>();
     //Some calculation and the value of copy is now holding some information
}

我想要创建一个新实例并分配给前一个值的类

class B extends A {
     List<String> paste = new ArrayList<>(copy);
}

它没有抛出任何错误,但列表仍然是空的。有没有人知道这里发生了什么以及如何计算这些东西?

4 个答案:

答案 0 :(得分:1)

class B extends A {
   List<String> paste = copy;
}

答案 1 :(得分:0)

... = new ArrayList<>(argument);您可以将数字或可迭代对象传递给参数

您需要分配,

class B extends A {
     List<String> paste = copy;
}

此代码会将copy class A对象的引用分配给class B的本地对象。

创建克隆,

List<String> paste = (ArrayList<String>)copy.clone();

答案 2 :(得分:0)

首先提示:你应该正确使用泛型。使用new ArrayList<String>

copy是A类的字段。paste是B类的字段(扩展A)。因此,当创建B类的新对象(让我们称之为o)时,会发生以下情况:

  • o.copy = ...
  • o执行类A的构造函数
  • o.paste = ...
  • 执行B类的构造函数

如果您需要有关Java的对象初始化过程的详细信息,请this is an excellent article

如果在{A}的构造函数中没有完成Some calculation部分,它将不会反映在B的初始值中。

让我试着制定一个解决方案:

class A {
     List<String> copy;
     //constructor
     public A() {
       copy = new ArrayList<>();
       //Some calculation and the value of copy is now holding some information
     }
}

class B extends A {
     List<String> paste;
     //constructor
     public B() {
       super(); //calls the A constructor and fills copy
       paste = new ArrayList<>(copy);
     }
}

答案 3 :(得分:0)

paste列表是在类B的默认构造函数中隐式创建的。这个构造函数首先包含对A的默认构造函数的隐式调用,它会创建copy列表。

根据您的计算时间,“复制”列表在课程B的构建时间可能为空。

为了使此正确,必须在A的构造函数内调用计算。