我在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
答案 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代码命名它。)