编译器告诉我他无法解决Singleton方法

时间:2016-09-17 01:25:39

标签: java android singleton

我在Android Studio上编写应用程序,编译器告诉我他无法解析我的单例方法。我尝试使用枚举前的J2SE 6单例实现和pos-J2SE 6实现,在这两种情况下都会出现问题。

以下是我编码的方式(这是一个简单的例子,我在我做同样的事情 单身人士,除了他有更多的方法等):

public class Singleton {

    private static final Singleton instance = new Singleton();
    private boolean aaa;

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }

    public void bbb(){}

}

OR

public enum Singleton{

    INSTANCE {

        private boolean aaa;       

        public void bbb(){}

    }

}

在同一个程序包中的另一个类别我编码

public class MapHandler implements OnMapClickListener
    Singleton abc = Singleton.getInstance();

    abc.bbb();
    // rest of code
}

编译器告诉我无法解析符号bbb()

我做错了什么?我问这个是因为这是一个简单的任务,其他人都以同样的方式做到这一点,但我已经在网上搜索过这个具体的案例,但我没有找到答案= S

1 个答案:

答案 0 :(得分:2)

以下是编码方式:

public enum Singleton {
    INSTANCE;

    private boolean aaa;       
    public void bbb(){}
}

public class Test {
    public static void main(String[] args) {
        Singleton abc = Singleton.INSTANCE;
        abc.bbb();
    }
}

请注意,bbb方法需要声明为enum的方法,而不是实例中的本地方法。

当你用这样的类体声明枚举常量时:

public enum Singleton {
    INSTANCE {
        private boolean aaa;       
        public void bbb(){}
    };
}

您隐式声明了一个扩展enum类的匿名内部类。类体内的东西是匿名内部类的一部分,而不是enum。这意味着bbb没有为enum声明// Usage with model and Active Form (with no default initial value) echo $form->field($model, 'date_from')->widget(DateTimePicker::classname(), [ 'options' => ['placeholder' => 'Enter event time ...'], 'readonly' => true, 'removeButton' => false, 'pluginOptions' => [ 'format' => 'yyyy-mm-ddThh:ii:ssZ', 'autoclose' => true, ] ]); 方法,并且实际上无法访问...除非您使用反射来调用它。

(这相当于在匿名类中声明一个公共方法,它与父类型层次结构中的任何方法都不对应。它就在那里......但你不能用Java代码命名它。)