单例模式处理

时间:2013-06-27 09:41:15

标签: java processing

嗨我想在处理中添加一个singelton模式

public class Singleton {

    private static final Singleton instance = new Singleton();

    private Singleton() {
    }

    static Singleton getInstance(){
        return instance;
    }

}

错误: 字段实例不能声明为static; 静态字段只能在静态或顶级类型中声明

谢谢汉斯

5 个答案:

答案 0 :(得分:1)

看来你的Singleton是一个内部阶级。来自JLS

  

内部类是未显式或隐式声明为静态的嵌套类。

     

内部类包括本地(§14.3),匿名(§15.9.5)和非静态成员类(§8.5)。

     

内部类可能不会声明静态初始化器(第8.7节)或成员接口,或者发生编译时错误。

     

内部类可能不会声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。

规范说内部类可能只声明编译时常量字段,而private static final Singleton instance = new Singleton();不是编译时常量。

答案 1 :(得分:1)

您必须创建新标签并将其命名为 Singleton.java 。使用Processing IDE时,每个使用静态变量的类都需要放在java文件中。

答案 2 :(得分:1)

试试这个

public class Singleton {     private static final Singleton实例;

private Singleton() {}

 public static Singleton getInstance() 
 {
    if(instance != null)
      return instance;
    else
         {
            instance = new Singleton();
         }
 }
}

答案 3 :(得分:1)

虽然您无法分辨,但无论您添加多少个标签,处理草图都是单个Java顶级类。选项卡可以帮助您组织代码,但它们仍属于单个类。无论您的草图被调用,都会调用此类,并在处理核心中扩展PApplet类。您在草图中定义的任何类都将成为顶级类(内部类)的一部分,并且由于编译器不允许您设置静态内部类,因此您永远不能实际创建它。

一般来说,我不明白为什么有人想要在处理中添加Singleton模式。其背后的原因是不允许从该类产生对象,而不是在模式中定义的单个对象。这种行为在设计API时很有用,或者当你有这么大的程序时,你需要跟踪产生的位置。单例模式在那里很有用,因为在某种程度上,它限制了每个顶级类可以对另一个顶级类进行的操作。 Singleton模式背后的另一个原因是允许全局字段和方法(可以在所有程序中使用)。由于处理草图本质上是一个单独的java类,因此您已经拥有此功能,并且只需在程序中的任何位置设置方法或字段即可。

这些是你在处理过程中不会做的事情,但可能是在一个不受限制你的完整的java环境中,比如eclipse。处理背后的想法是让事情变得尽可能简单,从而以各种方式限制你,这就是为什么我喜欢它的快速草图!当您的程序变得庞大/复杂时,最好切换到另一个IDE。

如果你愿意,你可以继续向我们提供你选择这种模式的原因,然后有人可以用最好的方式回答这个问题!

答案 4 :(得分:0)

如果您的Singleton是一个内部类,您应该声明它是静态的,以便能够在其中包含静态成员

public static class Singleton {
   ...