Java Android Studio不识别匿名类吗?
当我在Netbeans中编写以下代码时(我在那里测试我的LightMateConnection类),它编译并运行时不会出错Java Android Studio不识别匿名类吗?,java,android,netbeans,android-studio,anonymous-class,Java,Android,Netbeans,Android Studio,Anonymous Class,当我在Netbeans中编写以下代码时(我在那里测试我的LightMateConnection类),它编译并运行时不会出错 public class Main { public static void main(String[] args){ final LightMateConnection a = new LightMateConnection(); a.addConnectionListener(new ConnectionListener()
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()
),我得到“Class‘从ConnectionListener派生的匿名类’必须声明为抽象的,或者在‘ConnectionListener’中实现抽象方法‘onConnect()’。显然,我正在它下面实现这些方法,Netbeans能够理解。我的另外两个错误是覆盖注释,它们是“方法不从其超类覆盖方法”
就像Android Studio没有像Netbeans那样解释我的代码一样。问题最终与这样一个事实有关:当我将代码移到Android Studio时,包发生了变化,突然我无法实现非公共方法 这就解释了为什么我得到的方法没有被覆盖错误,因为默认的可见性方法没有被覆盖,因为它们在我的包外代码中不可见
我解决这个问题的办法是公开ConnectionListener的方法,这样就可以在包外访问它们。Android Studio是否从正确的包中导入
ConnectionListener
?是的,这是我自己的ConnectionListener
:导入com.coolkev.lightmate.ConnectionListener;
尝试重新启动,可以吗在您的ConnectionListener
包中,有时会发生一些AS故障,即onConnect()
public?如果是这样,那么在重写时将其公开。Java不允许您降低重写方法的可访问性,而且我认为匿名类的规则没有什么不同。如果ConnectionListener是一个接口,默认情况下,它的方法是public
(实际上总是public
——你不能让他们做任何其他事情)。所以你必须在重写时让他们公开。