【问题标题】:How to modify object from two classes in Java?如何修改Java中两个类的对象?
【发布时间】:2019-02-02 20:47:05
【问题描述】:

我有两个类和一个其他对象。我需要在这些类中获得相同的对象(相同的实例),并能够从这些类中修改它。在第一类我只需要这个对象的getter,在第二类我需要setter。两个类在组合的基础上又是一个类(我们称她为第三类)。我正在考虑将第三类的引用传递给第一类和第二类,但在此期间,它将为空。如果我将它设置为第二类的某个值,首先是类中的引用,仍然是对 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 的那一刻,引用为空。那么,如果我在第二类设置之后,它将是第一类中的同一个对象?

【问题讨论】:

  • 请发布一些示例代码。它有助于我们了解问题并为您提供更好的解决方案。
  • 现在应该没问题了:)
  • 您使用的是 Java 8 或更高版本吗?

标签: java components composition


【解决方案1】:

对于 Java 8 或更高版本,您可以通过使用 Supplier<SomeClass> 而不是引用来推迟对 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 将始终返回 Cobject,即使它同时在 C 中发生变化。

【讨论】:

  • 感谢您的回答,一切正常!由于声望点太少,我不能给你点数……
【解决方案2】:

您可以像第三类中的静态对象一样简单地做。希望这会对你有所帮助。

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();
            }
        }

【讨论】:

    【解决方案3】:

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

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

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多