没有可以访问Foo类型的封闭实例
我有以下代码:
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程序编译得很好,没有它。 这只是我定义的类正在失败。
它拒绝编译。 我得到No enclosing instance of type Hello is accessible."
在创建一个新的事物的线。我猜测:
有任何想法吗?
static class Thing
将使您的程序工作。
事实上,你已经将Thing
作为一个内部类,它(根据定义)与Hello
一个特定实例(即使它从不使用或引用它)相关联,这意味着说new Thing();
是错误的。 new Thing();
在范围内没有特定的Hello
实例。
如果您将其声明为静态类,那么它是一个“嵌套”类,它不需要特定的Hello
实例。
你已经将Thing类声明为一个非静态的内部类。 这意味着它必须与Hello类的一个实例关联。
在你的代码中,你正试图从静态的上下文中创建一个Thing实例。 这正是编译器所抱怨的。
有几种可能的解决方案。 要使用哪种解决方案取决于您想实现的目标。
将Thing更改为静态嵌套类。
static class Thing
创建一个Hello实例,然后创建一个Thing实例。
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
将Hello Thing移出Hello类。
有关嵌套/内部类的更多信息:嵌套类(The Java Tutorials)
那么...很多好的答案,但我想增加更多。 对Java中的Inner类的简要介绍允许我们在另一个类中定义一个类,并且以这种方式嵌套类具有一定的优势:
它可以隐藏(它增加了封装)来自其他类的类 - 尤其是当类仅被它包含的类使用时相关。 在这种情况下,外界不需要知道它。
它可以使代码更易于维护,因为这些类在逻辑上围绕在需要的地方组合在一起。
内部类可以访问其包含的类的实例变量和方法。
我们主要有三种类型的Inner Classes
一些要记住的重要点
让我们尝试实践上述概念
public class MyInnerClass {
public static void main(String args[]) throws InterruptedException {
// direct access to inner class method
new MyInnerClass.StaticInnerClass().staticInnerClassMethod();
// static inner class reference object
StaticInnerClass staticInnerclass = new StaticInnerClass();
staticInnerclass.staticInnerClassMethod();
// access local inner class
LocalInnerClass localInnerClass = new MyInnerClass().new LocalInnerClass();
localInnerClass.localInnerClassMethod();
/*
* Pay attention to the opening curly braces and the fact that there's a
* semicolon at the very end, once the anonymous class is created:
*/
/*
AnonymousClass anonymousClass = new AnonymousClass() {
// your code goes here...
};*/
}
// static inner class
static class StaticInnerClass {
public void staticInnerClassMethod() {
System.out.println("Hay... from Static Inner class!");
}
}
// local inner class
class LocalInnerClass {
public void localInnerClassMethod() {
System.out.println("Hay... from local Inner class!");
}
}
}
我希望这对每个人都有帮助。 请参阅更多
链接地址: http://www.djcxy.com/p/88885.html