什么导致错误“类型Foo的封闭实例不可访问”,我该如何修复它?

360

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!");
    }
}

我知道Thing没有任何作用,但是我的Hello, World程序在没有它的情况下也可以成功编译。只有我定义的类出现了问题。
并且它拒绝编译。在创建一个新的Thing时,我得到了No enclosing instance of type Hello is accessible.的错误信息。我猜可能是以下两种情况之一:
  1. 我存在系统级问题(无论是在DrJava还是我的Java安装中),或者
  2. 我对如何构建一个可运行的Java程序存在一些基本的误解。
你有什么想法吗?

可能是重复的问题,与Java内部类和静态嵌套类相关。 - Strelok
11个回答

0

内部类Thing声明为静态,它将可以无问题地工作。

我记得当我将内部类Dog声明为class Dog {时,我遇到了同样的问题。我和你一样遇到了相同的问题。有两个解决方案

1- 将内部类Dog声明为静态。 或者

2- 将内部类Dog移动到一个新的类中。

这是一个例子:

public class ReturnDemo {

public static void main(String[] args) {
    
    int z = ReturnDemo.calculate(10, 12);
    System.out.println("z = " + z);
    
    ReturnDemo.Dog dog = new Dog("Bosh", " Doggy");
    System.out.println( dog.getDog());
}


public static int calculate (int x, int y) {
    return x + y;
}

public void print( ) {
    System.out.println("void method");
    return;
}

public String getString() {
    return "Retrun String type value";
}


static class Dog {
    
private String breed;
private String name;

public Dog(String breed, String name) {
    super();
    this.breed = breed;
    this.name = name;
}

public Dog getDog() {
    // return Dog type;
    return this;
    
}

public String toString() {
    return "breed" + breed.concat("name: " + name);
}
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接