在java中创建外部类之外的内部类实例

在java中创建外部类之外的内部类实例,java,class,inner-classes,Java,Class,Inner Classes,我是Java新手 我的文件A.java如下所示: anotherMethod(new A(new A(null).new B(5))); 公共A类{ 公共B级{ int k; 公共B(inta){k=a;} } B某事物; 公共A(B){sth=B;} } 在另一个java文件中,我试图创建一个调用 anotherMethod(新A(新A.B(5)); 但由于某种原因,我得到了一个错误:没有类型A的封闭实例是可访问的。必须使用类型A的封闭实例(例如x.new B(),其中x是A的实例)来限

我是Java新手

我的文件
A.java
如下所示:

anotherMethod(new A(new A(null).new B(5)));
公共A类{
公共B级{
int k;
公共B(inta){k=a;}
}
B某事物;
公共A(B){sth=B;}
}
在另一个java文件中,我试图创建一个调用

anotherMethod(新A(新A.B(5));
但由于某种原因,我得到了一个错误:
没有类型A的封闭实例是可访问的。必须使用类型A的封闭实例(例如x.new B(),其中x是A的实例)来限定分配。


有人能解释一下我怎么做我想做的事吗?我的意思是,我真的需要创建
A
的实例,然后将其设置为
sth
,然后将
A
的实例交给该方法吗?还是有其他方法可以做到这一点?

在您的示例中,您有一个内部类,它总是绑定到外部类的实例

如果您想要的只是为了可读性而嵌套类,而不是实例关联,那么您需要一个静态的内部类

public class A {
    public static class B {
        int k;
        public B(int a) { k=a; }
    }
    B sth;
    public A(B b) { sth = b; }
}

new A.B(4);

在外部类之外,您可以像这样创建内部类的实例

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
就你而言

A a = new A();
A.B b = a.new B(5);

有关更多详细信息,请阅读此处有趣的谜题。除非将
B
设置为静态类,否则实例化
a
的唯一方法是将
null
传递给构造函数。否则,您必须获得
B
的实例,该实例只能从
A
的实例实例化,该实例需要
B
的实例进行构造

null
解决方案如下所示:

anotherMethod(new A(new A(null).new B(5)));

B不依赖于A,因此将其设置为静态是有意义的(
公共静态类B
)-然后您的代码就可以工作了。另请参见:我不知道为什么我没有想到使用
静态
,但事实上这是解决方案。谢谢,我不知道为什么我没有想到使用
static
,但事实上这就是解决方案。谢谢当我有能力的时候,我会在9分钟内得到你的答案。这在大多数情况下都是很好的建议+1.但是,它在这种情况下不起作用,因为
A
没有默认构造函数。