Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java接口继承_Java_Inheritance - Fatal编程技术网

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
的测试应该会阻止强制转换的执行,在我的测试中也是这样做的。另请参见