java - 在另一个对象中传递对象的正确方法

标签 java class object

早上好,我正在学习java,我有一个问题。 我有一个带有构造函数的类“表”,它接受“字段”,并将其放入 PRIVATE 变量中。

问题是:传递对象并使用“=”放入 PRIVATE 变量是正确的,还是克隆它更好? 如果我使用“=”,类中的变量仍然可以通过使用类构造函数的方法进行编辑,并最终将 NULL 放入其中。

例如:

class Table{
private Field field;

table (Field field)
{this.field=field;}

public String getValue()
{return field.toString(); }

}

main{

Field field=new Field("VALUE1");
Table table(field);
field.value="VALUE2";

System.out.println(table.field.getValue());
}

结果是“VALUE2”。 所以在表中传递了一个值,然后我改变它。 但对于“良好的编程艺术”来说,这是可以接受的,或者说是更好的

class Table{
private Field field;

table (Field field)
{this.field=field.clone();}

public String getValue()
{return field.toString();}
}

main{

Field field=new Field("VALUE1");
Table table(field);
field.value="VALUE2";

System.out.println(table.field.getValue());
}

打印 VALUE1

所以如果我将一个值传递给表,我无法在不使用表方法的情况下修改它?

正确的方法是什么?

最佳答案

这是一个好问题,指出了一个真正的问题。推荐的方法是让你的类不可变。

所以问题不在于 Table 类,而在于 Field 类 - 它应该只允许通过构造函数修改值,而不是通过直接更改或使用 setter。这样做就不会有这个问题。

关于java - 在另一个对象中传递对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891721/

相关文章:

java - 无法从主 Activity 加载 fragment

java - 具有多线程的 REST Api,用于在 Spring Boot 中处理文件

Python 新型类和 super 函数

javascript - 在 Javascript 中创建预定义对象的实例

java - 如何将命令传递给另一个 Activity 的组件?

java - 无法从 Spring Boot Controller 获取 web.xml 中的上下文参数

c# - 使用无论值如何始终返回 0 的类时出现问题

c++在程序中使用私有(private)类数据

Java - 更改对象后更新 JList

java - Java 中的对象引用