【发布时间】: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