public class Number {
private int j;
public Number(){
j = 3;
}
public Number(int m){
j = m;
}
public void SetNum(int n){
j = n;
}
public int GetNum(){
return j;
}
}
///(不同的文件,相同的目录)
public class User {
private Number jim;
public User(){
this.jim = new Number();
}
public static void main(String []args){
User keith = new User();
User justin = new User();
??????????????????????????
}
}
我想要
keith.jim = justin.jim
和justin.jim = keith.jim
。这样,如果我执行keith.jim.SetNum(34)
,则keith
和justin's
jim.j
都将是34
。怎么做?这个想法将在更大的代码段中实现。另外,
user.java
和Number
.java必须存在。无法更改上下文,我可以添加新方法,但不能更改Number
中的上下文(例如,在用户中输入j而不是Number)。每个用户都必须有一个数字对象,每个用户也要引用该对象。 最佳答案
其他人建议只创建一个User
对象。一种替代方法是有两个User
对象,但是对jim
字段的值使用相同的引用:
User keith = new User();
User justin = new User();
justin.jim = keith.jim;
如果您在
keith
和justin
需要不同的其他字段中使用了此字段,则这两个字段将很有用,但是jim
字段的值所引用的对象中的任何更改都必须同时可见。这两个都是有效选项,具体取决于您的要求。
但是,有几点要点:
这意味着
justin.jim
的原始值,因为没有意义;您可以考虑添加一个User
构造函数,该构造函数以Number
引用作为该字段的初始值,从而可以编写:User justin = new User(keith.jim);
像这样的共享可变状态可能变得难以推理,尤其是面对多个线程时
如注释中所述,您应该将您的
Number
类重命名为不在java.lang
(或java.util
等,如果可能)之内的名称。您应该为您的方法遵循Java命名约定,使用camelCase而不是PascalCase-我个人将它们称为
getValue
和setValue
。关于java - 如何使对象引用同一事物?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22293257/