早上好,我正在学习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/