【问题标题】:Polymorphic in AIDL inout paramAIDL inout 参数中的多态性
【发布时间】:2014-07-10 04:07:07
【问题描述】:

例如,有两个类

class B extends A { public int x; };

在 AIDL 中:

public void func( inout A params ); // the function does not change B.x value

然后有如下代码:

B objB;
objB.x = 99;
IObject.func( objB );

当代码执行时,objB.x 将被更改(不是 99),因为“func”函数只返回了 objB 的 A 部分,objB.x 将获得一个默认值(大多数是 0)。

我的问题:

如果“func”函数不改变B.x值,如何使objB.x保持不变?

【问题讨论】:

  • 对于常量,你可以将其声明为静态最终
  • @mona 但 objB.x 在其他情况下可能会改变。我只是希望它在这种情况下保持不变。
  • 所以只在 func 中你不想改变 B.x?
  • 在func B.x中不会改变,我不想在func的调用者中改变B.x

标签: android aidl


【解决方案1】:

这是我以前处理过的一件烦人的事情。我认为你的两个对象都实现了 parcelable。我能找到的唯一解决方案就是创建一个可打包的容器对象。因为您的 A 类和 B 类都是可打包的,所以它是一个非常容易创建的对象。

我认为发生这种情况的原因是因为使用的 CREATOR 来自参数类型 A。如果可能,我建议不要使用 AIDL,但在某些情况下它确实有意义。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 2016-03-19
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多