【发布时间】:2014-05-08 08:07:49
【问题描述】:
我一直在为这个问题苦苦挣扎。
我正在使用 DBus 的 DBus-java 绑定处理属性设置。当调用 Set 时,要设置的值被包装在一个 org.freedesktop.types.Variant 对象中,我必须从中提取它。通常,如果数据是原始数据,我可以在 Set 参数中使用泛型,并且绑定会在调用 Set 方法之前进行类型转换。
但是,我尝试使用 org.freedesktop.types.DBusStructType 进行设置,这是一种复杂类型,需要手动解包。到目前为止,我已经到了可以从变体中提取类型的地步,但我无法将包装在 Variant 中的值转换为 DBusStructType,即使它被明确标识为 DBusStructType
以下代码在使用来自 python dbus 测试的 DBus.Struct 调用时会引发 ClassCastException: Cannot cast [Ljava.lang.Object; to org.freedesktop.dbus.types.DBusStructType。我检查了变体签名是否正确打包,但我找不到将 Variant.getValue() 返回的对象转换为 Variant.getType() 指定的类型并访问结构字段的方法。
public void Set(String interface_name, String property_name, Variant new_value) throws Exception {
Type t = new_value.getType();
Object s = new_value.getValue();
t.getClass().cast(s);
System.out.println("Object cast to "+s.getClass().getName());
}
任何指针都将不胜感激,我已经开始深入研究反思,因为我还是新手,但我可能缺少一些东西。
【问题讨论】:
标签: java types casting dbus variant