使用供应商 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();
}
}