初始化静态内部类



使用供应商 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变量(。

InnerClass 的作用域是 OuterClass。因此,您可以在OuterClass的方法中访问它。在这种情况下,只需像从任何其他类一样创建类的实例。

public class OuterClass
{
  class InnerClass
  {
    public InnerClass() { super(); };
    public bar() {};
  }
  private void foo()
  {
    InnerClass aic = new InnerClass();
    aic.bar();
  } 
}

嵌套类是其封闭类的成员。非静态嵌套类(内部类(可以访问封闭类的其他成员,即使它们已声明为 private。静态嵌套类无权访问封闭类的其他成员。作为 OuterClass 的成员,可以将嵌套类声明为私有、公共、受保护或包私有。(回想一下,外部类只能声明为公共类或包私有类。

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

最新更新