【问题标题】:using a variablename of a class that is initializising使用正在初始化的类的变量名
【发布时间】:2013-10-18 11:53:28
【问题描述】:

我想初始化一个类,同时我想使用类变量。

像这样:

Myclass name = new Myclass(new AnotherClass(name));

它说:局部变量名称可能尚未初始化。
所以我的问题是是否有办法让 AnotherClass 知道 MyClass 的所有功能。

【问题讨论】:

  • 如果你这样使用它,并且这是第一次使用 Myclass 名称,那么它可能还没有被初始化,它还没有被初始化。为什么要这样做?
  • 我希望AnotherClass可以使用MyClass的所有方法
  • 首先要调用的是 new AnotherClass(name),所以它告诉你首先初始化 name。将 Myclass 名称放在上排并用 null 初始化它。
  • 如果您希望 AnotherClass 具有与 MyClass 相同的方法,请让 AnotherClass 扩展 MyClass
  • 我认为你有一个严重的设计问题。重新思考您的设计。

标签: java class variables initialization


【解决方案1】:

您不能让两个对象相互要求来构造它们。这不仅行不通,而且设计不佳。

如果您真的需要这样的东西,请自行创建对象:

Myclass name = new Myclass();

然后,当您创建 AnotherClass 时,将其传递给 MyClass 并让它保存对它的引用。

name.setAnohterClass(new AnotherClass(name));


更好的设计是减少耦合,让一个类知道另一个类。例如:

Myclass name = new Myclass();
AnotherClass another = new AnotherClass(name);

【讨论】:

    【解决方案2】:

    如果您想让其他类只知道函数(而不是对象状态),您可以使用带有默认构造函数的其他对象来实现:

    Myclass tmpObject = new Myclass();
    Myclass name = new Myclass(new AnotherClass(tmpObject));
    

    但我也建议查看AnotherClass。这个不清楚你要使用什么函数,可能你可以使用它们static,所以你不应该将它们传递给Myclass对象。

    【讨论】:

    • 谢谢,我现在将它们用作static
    【解决方案3】:

    试试

    Myclass name = new Myclass(new AnotherClass(new Myclass()));

    问题是您试图从源对象name 本身初始化对象name。这是不可能的,你现在知道了。

    如果你想实现,可以按照上面的方式进行。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2015-04-22
      • 2017-02-23
      相关资源
      最近更新 更多