我想创建一个列表实例,并从另一个类中分配给相同类型列表的值。
要复制的原始变量在这里
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);
}
它没有抛出任何错误,但列表仍然是空的。有没有人知道这里发生了什么以及如何计算这些东西?
答案 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)时,会发生以下情况:
如果您需要有关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
的构造函数内调用计算。