【问题标题】:Does Android Studio not recognize anonymous classes?Android Studio 不能识别匿名类吗?
【发布时间】:2015-04-18 03:17:13
【问题描述】:

当我在 Netbeans(我在其中测试我的 LightMateConnection 类)中编写以下代码时,它编译并运行没有错误。

public class Main {
    public static void main(String[] args){
        final LightMateConnection a = new LightMateConnection();
        a.addConnectionListener(new ConnectionListener()
        {
            @Override
            void onConnect(){
                //Do Stuff
            }
            @Override
            void onDisconnect(){
                //Do Stuff
            }
        });
    }
}

由于它适用于 Netbeans,我认为当我转移到 Android Studio 时,几乎相同的代码仍然可以工作。我在下面创建了构造函数:

public MainActivity(){ //Note that this is a constructor, not a class
    super();

    LightMateConnection lmc = new LightMateConnection();
    lmc.addConnectionListener(new ConnectionListener()
    {
        @Override
        void onConnect(){
            //Do Stuff
        }
        @Override
        void onDisconnect(){
            //Do Stuff
        }
    });
}

Android Studio 给了我 3 个错误。在第 4 行,有 ...(new ConnectionListener(),我得到“类‘从 ConnectionListener 派生的匿名类’必须声明为抽象或在‘ConnectionListener’中实现抽象方法‘onConnect()’”。显然,我在它下面实现了这些方法,Netbeans 能够赶上。我的另外两个错误是在 Override 注释上,它们是“方法没有覆盖其超类中的方法”。

Android Studio 不像 Netbeans 那样解释我的代码。

【问题讨论】:

  • Android Studio 是否从正确的包中导入 ConnectionListener
  • 是的,这是我自己的ConnectionListener: import com.coolkev.lightmate.ConnectionListener;
  • 尝试重启,可能是AS的一些故障,有时会发生
  • 在您的ConnectionListener 包中,onConnect() 是公开的吗?如果是这样,请在覆盖它时将其公开。 Java 不允许您降低覆盖方法的可访问性,而且我认为匿名类的规则没有任何不同。
  • 如果 ConnectionListener 是一个接口,它的方法默认是public(实际上总是 public--你不能把它们做成别的)。因此,您必须在覆盖时将它们公开。

标签: java android netbeans android-studio anonymous-class


【解决方案1】:

问题最终与以下事实有关:当我将代码移至 Android Studio 时,包发生了变化,突然之间我无法实现非公共方法。

这解释了为什么我收到方法未覆盖错误,因为默认可见性方法没有被覆盖,因为我的包外代码看不到它们。

我对这个问题的解决方案是将 ConnectionListener 的方法公开,以便可以从包中访问它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多