【问题标题】:I have an object of an outer class. How do I get the object of the inner class from it?我有一个外部类的对象。如何从中获取内部类的对象?
【发布时间】:2014-12-12 15:05:01
【问题描述】:
public class Class1 {

  public Class2 getClass2() {
  //How can I implement this method?
  }

  public class Class2 {
  //...
  }
}

我就是无法完成它,即使它应该只有一行代码......

【问题讨论】:

  • 你到底想达到什么目的?
  • 没有实例怎么办?如果有三个实例怎么办?
  • return new Class2();?你应该真正解释你想要达到的目标。
  • 每个类只有一个实例,没有Class1就不能存在Class2,这就是我使用内部类的原因。

标签: java oop inner-classes


【解决方案1】:

你不应该这样做。内部类应该在外部类中使用,而不是在其他地方使用。 如果你需要一个内部类的实例,那么它不应该是一个内部类。

【讨论】:

  • 好的,但是我必须使用给定的接口进行具有该方法的分配...
  • 我不同意这个答案;嵌套类和内部类可以提供一种有用的方法来对相关类进行分组。例如,请参阅docs.oracle.com/javase/8/docs/api/javax/swing/…(使用此技术的 Swing API)。
  • 我不明白你的问题。我认为你应该更新你的 sn-p 因为如果你必须在外部类之外使用内部类引用,那么它一定不是内部类。
  • @DavidP.Caldwell 我说一般你应该避免这样使用,但在某些情况下它像 Builder 模式一样有用。
  • 我将它们用于最大流算法。一个网络(外部类)将得到一个流(内部类)。内部类是有意义的,因为没有网络就不能存在流......
【解决方案2】:

我认为您对内部类的概念有误。在您的示例中,您有一个公共内部类。这并不意味着您的Class1 恰好有一个Class2 对象。您仍然可以根据需要创建任意数量的 Class2 对象。如果您想在Class1 之外执行此操作,请使用new Class1.Class2()。虽然这是可能的,但正如他的回答中正确提到的 galovics 那样,这将是糟糕的设计。

如果您要实现的目标是在 Class1 内有一个对象引用 Class2 对象,请在 Class1 中使用 Class2 类型的字段和匹配的 getter 方法:

public class Class1 {

    private Class2 class2instance = new Class2();

    public Class2 getClass2() {
        return class2instance;
    }

    private class Class2 {
        //...
    }
}

【讨论】:

    【解决方案3】:

    只需像这样在外部类中创建一个 getter 方法。

    public class Class1 {
    
      public Class2 getClass2() {
      //How can I implement this method?
      }
    
      public Class2 getClass2() {
        return new Class2();
      }
    
      public class Class2 {
      //...
      }
    }
    

    【讨论】:

    • 这不是创建一个新对象吗?如果那里已经有一个怎么办?
    【解决方案4】:
    public class Class1 {
        private Class2 class2 = new Class2();
    
        public Class2 getClass2() {
            return class2;
        }
    
        public class Class2 {
        //...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 2021-01-16
      • 2011-01-17
      • 1970-01-01
      • 2022-01-15
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多