初始化静态内部类

时间:2017-03-21 14:46:57

标签: java oop java-ee

使用供应商API,我需要在内部类上设置一些参数,但我得到了异常: 非正式的OuterClass.InnerClass类型的实例规范 在“ oc.new InnerClass()

OuterClass oc = new OuterClass();
OuterClass.InnerClass rc2 = oc.new InnerClass();

在读取内部类,特别是静态内部类之后,我可以使用:

实例化它
OuterClass.InnerClass myInnerClass = new OuterClass.InnerClass();
myInnerClass.setName("John");

我的问题是,我如何实现

MyParentClass parentClass = new MyParentClass(); parentClass.setOuterClassObject(outerClassObject) 当我从未实例化过OuterClass对象时。

基本上我想在MyParentClass上设置一个填充的outerClass(带有innerClass变量)。

1 个答案:

答案 0 :(得分:0)

InnerClass的范围是OuterClass。所以你可以在OuterClass的方法里面访问它。在这种情况下,只需从任何其他类创建类的实例。

public class OuterClass
{
  class InnerClass
  {
    public InnerClass() { super(); };
    public bar() {};
  }

  private void foo()
  {
    InnerClass aic = new InnerClass();
    aic.bar();
  } 

}

嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private。 (回想一下外部类只能声明为public或package private。)

public class OuterClass
{
  private class NonStaticInnerClass
  {
    public bar() { foo(); };
  }

  private static class StaticInnerClass
  {
    public bar() { foo(); }; // Compiler error!!!
  }

  private void foo() {} ;
}

无法访问OuterClass之外的InnerClass(未定义),但您可以将其作为接口访问:

public interface IInterface
{
  public void bar();
}

public class OuterClass
{
  class InnerClass implemets IInterface
  {
    public InnerClass() { super(); };
    public void bar();
  }

  private InnerClass ic;

  public IInterface getIInterface() { return ic; };
}

public class AnotherClass
{
  private OuterClass oc;

  public foo()
  {
    IInterface iI = oc.getIInterface();
    iI.bar();
  }
}