如何从Java中的两个类修改对象?

时间:2018-08-28 09:09:59

标签: java components composition

我有两个类和另一个对象。我需要在这些类中获得相同的对象(相同的实例),并能够在这些类中对其进行修改。在第一堂课中,我只需要获取该对象的吸气剂,在第二堂课中,我只需要使用setter。根据组成情况,这两个类都在另一个类中(我们称她为第三类)。我考虑将引用从第三类传递到第一和第二类,但是在此期间,它将为null。如果我将其设置为第二个类的某个值,则第一个类中的引用仍将引用为null?有没有更好,更合适的方法呢?

class First {
      SomeClass object;

     public void setObject(SomeClass object) {
         this.object = object;
      }
      public SomeClass getObject() {
         return object;
      }
    }

    class Second {
      SomeClass object;

      public void setObject(SomeClass object) {
         this.object = object;
      }
    public SomeClass getObject() {
         return object;
      }
    }

    class Third {
      First first;
      Second second;
      SomeClass object;

      public void initializeClasses(){
        first.setObject(object);
        second.setObject(object);
      }
    }

但是在initializeClassed的改进中,引用为null。因此,如果我在第二堂课中设置了该对象,那么它将是第一堂课中的相同对象吗?

3 个答案:

答案 0 :(得分:1)

对于Java 8或更高版本,您可以使用SomeClass而不是引用来推迟对Supplier<SomeClass>的实际访问。您可以这样:

class A {
    private Supplier<SomeClass> objectSupplier;
    public SomeClass getObject() {
        return objectSupplier.get();
    }
    public void setObjectSupplier(Supplier<SomeClass> supplier) {
        objectSupplier = supplier;
    }
}

并像这样创建它:

class C {
    class A a;
    private SomeClass object;

    public void initClasses() {
        a.setObjectSupplier(() -> object);
    }
}

这样,C的实例a将始终返回C的{​​{1}},即使在此期间object中发生了变化。 / p>

答案 1 :(得分:0)

您可以像在Third Class中的静态对象那样简单地进行操作。希望对您有帮助。

class First
          {
            SomeClass object;

            public void setObject(SomeClass object)
            {
                this.object = object;
            }

            public SomeClass getObject()
            {
                return Third.second.getObject();
            }
        }

  class Second
        {
            SomeClass object;

            public void setObject(SomeClass object)
            {
                this.object = object;
            }

            public SomeClass getObject()
            {
                return object;
            }
        }

  public class Third
        {
            static First first;
            static Second second;
            SomeClass object;

            public void initializeClasses()
            {
                first = new First();
                second = new Second();
                object = new SomeClass();
                System.out.println(object);
                second.setObject(object);
                System.out.println(first.getObject());

            }

            public static void main(String [] args)
            {
                Third t = new Third();
                t.initializeClasses();
            }
        }

答案 2 :(得分:0)

在您的代码中 -Class First和Class Second都具有SomeClass的引用变量,并且均为null且未连接。 -如果您将SomeClass对象设置为第二类中的新值,则第一类值仍将引用null。

解决方案 -传递一个初始化的对象,以便类First和类Second中的SomeClass引用指向内存中的同一对象(不为null) -切勿将SomeClass引用设置为Second Class中的新对象,这将使SomeClass引用指向First类和Second Class中的单独对象 -而是更改Class Second中SomeClass引用所引用的SomeClass对象的属性,以查看更改已反映在First Class

希望它会有所帮助:)