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.jimjustin.jim = keith.jim。这样,如果我执行keith.jim.SetNum(34),则keithjustin's jim.j都将是34。怎么做?这个想法将在更大的代码段中实现。

另外,user.javaNumber .java必须存在。无法更改上下文,我可以添加新方法,但不能更改Number中的上下文(例如,在用户中输入j而不是Number)。每个用户都必须有一个数字对象,每个用户也要引用该对象。

最佳答案

其他人建议只创建一个User对象。一种替代方法是有两个User对象,但是对jim字段的值使用相同的引用:

User keith = new User();
User justin = new User();
justin.jim = keith.jim;


如果您在keithjustin需要不同的其他字段中使用了此字段,则这两个字段将很有用,但是jim字段的值所引用的对象中的任何更改都必须同时可见。

这两个都是有效选项,具体取决于您的要求。

但是,有几点要点:


这意味着justin.jim的原始值,因为没有意义;您可以考虑添加一个User构造函数,该构造函数以Number引用作为该字段的初始值,从而可以编写:

User justin = new User(keith.jim);

像这样的共享可变状态可能变得难以推理,尤其是面对多个线程时
如注释中所述,您应该将您的Number类重命名为不在java.lang(或java.util等,如果可能)之内的名称。
您应该为您的方法遵循Java命名约定,使用camelCase而不是PascalCase-我个人将它们称为getValuesetValue

关于java - 如何使对象引用同一事物?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22293257/

10-09 05:36