This question already has an answer here:
I'm new to Java.
My file A.java
looks like this:
public class A {
public class B {
int k;
public B(int a) { k=a; }
}
B sth;
public A(B b) { sth = b; }
}
In another java file I'm trying to create the A object calling
anotherMethod(new A(new A.B(5)));
but for some reason I get error: No enclosing instance of type A is accessible. Must qualify the allocation with an enclosing instance of type A (e.g. x.new B() where x is an instance of A).
Can someone explain how can I do what I want to do? I mean, do I really nead to create instance of A
, then set it's sth
and then give the instance of A
to the method, or is there another way to do this?
In your example you have an inner class that is always tied to an instance of the outer class.
If, what you want, is just a way of nesting classes for readability rather than instance association, then you want a static inner class.
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);
Outside the outer class, you can create instance of inner class like this
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
In your case
A a = new A();
A.B b = a.new B(5);
For more detail read Java Nested Classes Official Tutorial
Interesting puzzle there. Unless you make B
a static class, the only way you can instantiate A
is by passing null
to the constructor. Otherwise you would have to get an instance of B
, which can only be instantiated from an instance of A
, which requires an instance of B
for construction...
The null
solution would look like this:
anotherMethod(new A(new A(null).new B(5)));
来源:https://stackoverflow.com/questions/24506971/creating-instance-of-inner-class-outside-the-outer-class-in-java