Java接口继承
我编写了以下代码:Java接口继承,java,inheritance,Java,Inheritance,我编写了以下代码: package sample; import org.freedesktop.dbus.DBusInterface; import org.freedesktop.dbus.DBusInterfaceName; import org.freedesktop.dbus.DBusConnection; @DBusInterfaceName("org.mpris.clementine") interface Player extends DBusInterface, java.r
package sample;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusInterfaceName;
import org.freedesktop.dbus.DBusConnection;
@DBusInterfaceName("org.mpris.clementine")
interface Player extends DBusInterface, java.rmi.Remote {
void Pause();
}
class Main {
public static void main (String[] args) throws org.freedesktop.dbus.exceptions.DBusException, java.lang.InterruptedException {
DBusConnection dc = DBusConnection.getConnection(DBusConnection.SESSION);
Player player = (Player) dc.getRemoteObject("org.mpris.clementine", "/Player");
player.Pause();
dc.disconnect();
}
}
然后在队伍中犯了一个错误
Player player = (Player) dc.getRemoteObject("org.mpris.clementine", "/Player");
上面说
Exception in thread "main" java.lang.ClassCastException: $Proxy2 cannot be cast to sample.Player
我知道问题在于继承误解或类似的smth。我已经彻底搜索过了,但找不到答案。如何正确地写这行?有什么错误吗?您应该确保
dc.getRemoteObject
实现播放器界面改用此界面:
Object obj = dc.getRemoteObject("org.mpris.clementine", "/Player");
if( obj instanceof Player ) {
Player player = (Player) obj;
player.pause();
}
不确定“dc.getRemoteObject()”的作用是什么,如果是远程操作,则需要取消封送该对象 Object obj=dc.getRemoteObject(“org.mpris.clementine”,“/Player”) Player=(Player)PortableRemoteObject.窄(obj,Player.class)
问题是你认为你会得到一些扩展/实现播放器的东西,但你不是。你会得到某种自动生成的代理,它不会扩展/实现播放器。也许是一张单子?我不知道。我建议在那里设置一个断点,并运行一些instanceof检查,看看你有什么。你能把这个连接的另一边发过去吗?你在“/Player”下“绑定”了什么?Alex K,我用了这个,但我在行中遇到了相同的错误错误错误是,你从
dc.getRemoteObject()获取的对象实现了DBusInterface
,但不是Player
。要将其强制转换为Player
,继承顺序必须是另一种方式,如DBusInterface扩展Player
。目前程序无法运行“pause()”方法实现。使用instanceof
的测试应该会阻止强制转换的执行,在我的测试中也是这样做的。另请参见