Java 使用等号或复制构造函数将列表设置为等于列表?

Java 使用等号或复制构造函数将列表设置为等于列表?,java,Java,这是一个简单的问题,但如果我这样做了 List<Object> list = getObjectsFromDatabase(); 这不是正确的处理方法吗 但这会吗 List<Object> firstList = getObjectsFromDatabase(); List<Object> list = new ArrayList<Object>(firstList); 或者如果我有课的话 public class ReportDisplay

这是一个简单的问题,但如果我这样做了

List<Object> list = getObjectsFromDatabase();
这不是正确的处理方法吗

但这会吗

List<Object> firstList = getObjectsFromDatabase();

List<Object> list = new ArrayList<Object>(firstList);
或者如果我有课的话

public class ReportDisplayModel<T> {

    public ReportDisplayModel(List<T> data) {
        this.data = data;
    }
    public List<T> data;
}
我想在这个模型中设置数据,我会使用构造函数吗

ReportDisplayModel<Object> model = new ReportDisplayModel<Object>(getData());
而不是

ReportDisplayModel<Object> model = new ReportDisplayModel<Object>();

model.data = getData();
只是需要澄清一下。谢谢。

关于

List<Object> list = getObjectsFromDatabase();
ReportDisplayModel<Object> model = new ReportDisplayModel<Object>(getData());
vs

我更喜欢第一种方法。只是因为如果我不小心做了类似的事情,我不想担心空指针异常等

ReportDisplayModel<Object> model = new ReportDisplayModel<Object>();
model.printData();
model.data = getData();
关于

List<Object> list = getObjectsFromDatabase();
ReportDisplayModel<Object> model = new ReportDisplayModel<Object>(getData());
vs

我更喜欢第一种方法。只是因为如果我不小心做了类似的事情,我不想担心空指针异常等

ReportDisplayModel<Object> model = new ReportDisplayModel<Object>();
model.printData();
model.data = getData();

这完全取决于getData返回的内容

通常会返回Collections.unmodifiableListresult,以便客户端无法修改结果

如果此结果未在其他任何地方使用,并且对其进行的修改不会影响任何内容,则可以按原样使用结果


很少需要使用复制构造函数—在确定修改数据会影响其他组件时使用它。

这完全取决于getData返回的内容

通常会返回Collections.unmodifiableListresult,以便客户端无法修改结果

如果此结果未在其他任何地方使用,并且对其进行的修改不会影响任何内容,则可以按原样使用结果


很少需要使用复制构造函数-在确定修改数据会影响其他组件时使用它。

避免使用等号,因为它破坏了封装的坏习惯。选择复制构造函数最佳实践。

避免使用等号,因为它破坏了封装的坏习惯。选择复制构造函数最佳实践。

我不太明白你的问题,但我会尝试一下

主要区别在于,使用复制构造函数创建列表的新独立副本,即

List<Object> firstList = getObjectsFromDatabase(); // firstList is the list returned by the database

List<Object> list = new ArrayList<Object>(firstList); //list is an independent copy of firstList

现在,如果更改firstList,则getObjectsFromDatabase返回的列表也将更改,或者如果不支持更改,将引发异常。另一方面,列表可以自由更改,而不会影响原始列表。

我不太明白你的问题,但我会尝试一下

主要区别在于,使用复制构造函数创建列表的新独立副本,即

List<Object> firstList = getObjectsFromDatabase(); // firstList is the list returned by the database

List<Object> list = new ArrayList<Object>(firstList); //list is an independent copy of firstList
现在,如果更改firstList,则getObjectsFromDatabase返回的列表也将更改,或者如果不支持更改,将引发异常。另一方面,列表可以自由更改,而不会影响原始列表