2016-09-17 65 views
1

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

这里是我如何编码(这是一个简单的例子,我在做同样的事情在我的 辛格尔顿除了他有更多的方法等):

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 
} 

编译器告诉我,可以不属于R esolve symbol bbb()

我在做什么错?我在问这是因为这是一个简单的任务,其他人都以同样的方式执行此操作,但我在网上搜索了有关此特定案例的信息,并且我找不到此答案= S

+0

Android Studio默认编译器是javac的权利?你以为我在用jack吗? –

+0

我在下面的评论中添加了一些代码。解决您面临的所有问题至关重要。 – ChiefTwoPencils

回答

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声明,并且实际上无法访问......除非使用反射来调用它。

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

+0

这个问题没有解决,我有一些照片,在这里:http://imgur.com/a/CuwhR(这是使用单身人士的班级)和http://imgur.com/a/XwbTQ (这是单身人士)= S –

+0

我无法阅读这些图像。将您的代码和错误消息作为>> TEXT <<输入到问题中。 –

+0

嗡嗡声与你告诉我做的没什么不同,我确切地说了你的话,我只是用imgur来告诉你,即使按照你告诉我的方式,编译器仍然无法解决它,打印一条消息(他没有顺便打印logcat上无法解析的符号)= S –