Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化静态内部类_Java_Oop_Jakarta Ee - Fatal编程技术网

Java 初始化静态内部类

Java 初始化静态内部类,java,oop,jakarta-ee,Java,Oop,Jakarta Ee,使用供应商API时,我需要在内部类上设置一些参数,但我遇到了一个异常: 类型OuterClass.InnerClass的非法封闭实例规范 在“oc.new InnerClass()”上 在阅读了内部类,特别是静态内部类之后,我可以使用以下方法对其进行实例化: OuterClass.InnerClass myInnerClass = new OuterClass.InnerClass(); myInnerClass.setName("John"); 我的问题是,我如何实现 MyParentCla

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

在阅读了内部类,特别是静态内部类之后,我可以使用以下方法对其进行实例化:

OuterClass.InnerClass myInnerClass = new OuterClass.InnerClass();
myInnerClass.setName("John");
我的问题是,我如何实现

MyParentClass parentClass=新的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();
  } 

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

无法访问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();
  }
}
静态内部类没有任何外部类对象。这就是所谓的静态。我不太明白你想要实现什么。
public class OuterClass
{
  private class NonStaticInnerClass
  {
    public bar() { foo(); };
  }

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

  private void foo() {} ;
}
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();
  }
}