Creating instance of inner class outside the outer class in java
Solution 1
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);
Solution 2
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
Solution 3
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)));
burtek
Student interested in programming, maths, travel (incl. cycling, skiing and sailing), photography and books.
Updated on June 11, 2022Comments
-
burtek almost 2 years
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'ssth
and then give the instance ofA
to the method, or is there another way to do this?