【问题标题】:Java interface inheritanceJava接口继承
【发布时间】:2013-01-06 14:04:23
【问题描述】:

我已经写了这段代码:

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

我知道问题在于对继承的误解或类似的事情。我已经彻底搜索过,但找不到答案。如何正确写出这一行?还有什么错误?

【问题讨论】:

  • 问题是你认为你会得到一些扩展/实现 Player 的东西,但你不是。您将获得某种不扩展/实现 Player 的自动生成代理。也许它是一个 List ?我不知道。我建议在那里设置一个断点并运行一些 instanceof 检查以查看您拥有的内容。你能把这个连接的另一端贴出来吗?你在“/Player”下“绑定”了什么?

标签: java inheritance


【解决方案1】:

您应该确保

返回的类
 dc.getRemoteObject  

实现界面播放器

【讨论】:

    【解决方案2】:

    改用这个:

    Object obj = dc.getRemoteObject("org.mpris.clementine", "/Player");
    if( obj instanceof Player ) {
        Player player = (Player) obj;
        player.pause();
    }
    

    【讨论】:

    • Alex K,我用过这个,但我遇到了同样的错误
    • 错误是,您从dc.getRemoteObject() 获得的对象实现了DBusInterface,而不是Player。为了能够将其转换为Player,继承顺序必须相反,例如DBusInterface extends Player。现在没有程序可以运行的“pause()”方法实现。 instanceof 的测试应该阻止强制转换被执行,在我的测试中也是这样做的。
    【解决方案3】:

    不确定 'dc.getRemoteObject()' 是做什么的,如果它是远程操作,您需要解组该对象。

    Object obj= dc.getRemoteObject("org.mpris.clementine", "/Player");

    Player player =(Player)PortableRemoteObject.narrow(obj,Player.class)

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2015-10-03
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多