coolpapa coolpapa - 2 months ago 12
Java Question

Java - No enclosing instance of type Foo is accessible

I have the following code:

class Hello {
class Thing {
public int size;

Thing() {
size = 0;
}
}

public static void main(String[] args) {
Thing thing1 = new Thing();
System.out.println("Hello, World!");
}
}


I know
Thing
does nothing, but my Hello, World program compiles just fine without it. It's only my defined classes that are failing on me.

And it refuses to compile. I get
No enclosing instance of type Hello is accessible."
at the line that creates a new Thing. I'm guessing either:


  1. I have system level problems (either in DrJava or my Java install) or

  2. I have some basic misunderstanding of how to construct a working program in java.



Any ideas?

Answer

static class Thing will make your program work.

As it is, you've got Thing as an inner class, which (by definition) is associated with a particular instance of Hello (even if it never uses or refers to it), which means it's an error to say new Thing(); without having a particular Hello instance in scope.

If you declare it as a static class instead, then it's a "nested" class, which doesn't need a particular Hello instance.

Comments