use*_*230 6 java static compiler-errors
我有一个代码:
package why;
public class Foo
{
public class Foo1
{
String bar;
public Foo1(String bar)
{
this.bar = bar;
}
public static Foo1 MYCONSTANT = new Foo(null);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到'非静态变量,这不能从静态上下文引用'?我分配了非静态类的实例.
为什么在这里?
public static Foo getMYCONSTANT()
{
return new Foo(null, null);
}
Run Code Online (Sandbox Code Playgroud)
谢谢
让我们来看看这个例子:
public class MainClass {
public class NonStaticClass {
public static NonStaticClass nonStatic = new NonStaticClass();
//Compile error: The field nonStatic cannot be declared static;
//static fields can only be declared in static or top level types
public static int i = 10;//this field also causes the same compile error
}
}
Run Code Online (Sandbox Code Playgroud)
问题是NonStaticClass,嗯,不是静态的.非静态内部类不能包含静态字段.
如果你想在内部类中有一个静态字段,你需要使类静态.
从java文档:
内在的类
与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段.此外,由于内部类与实例相关联,因此无法定义任何静态成员本身.
有关更多信息,请查看嵌套类
我不确定你真正的问题是什么......但这也许会有所帮助:
http://en.wikipedia.org/wiki/Singleton_pattern
Joshua Bloch 在他的《Effective Java》一书的第二版中声称,对于任何支持枚举的 Java,“单元素枚举类型是实现单例的最佳方式”[9]。枚举的使用非常容易实现,并且对于可序列化对象没有任何缺点,必须通过其他方式来规避。
public enum Singleton {
INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)