【问题标题】:How does Android's Parcelable interface force implementing classes to have a static field?Android 的 Parcelable 接口如何强制实现类具有静态字段?
【发布时间】:2020-05-05 21:14:21
【问题描述】:

Android 有一个接口 Parcelable,它以某种方式强制实现类具有 public static CREATOR 字段。

来自接口的文档:

实现 Parcelable 接口的类也必须有一个 名为 CREATOR 的非空静态字段,其类型为 实现Parcelable.Creator 接口。

我的问题分为两部分:

1) 这个接口如何强制实现类拥有这个静态 CREATOR 字段?如何在我自己的 Java 接口中做到这一点?我无法从 Parcelable 的源代码中看到它是如何工作的。

例如: 如果我有一个接口 Car,并且我希望每个实现类都有一个公共静态 String MANUFACTURER。这可以以类似于 Parcelable 的 CREATOR 字段的方式完成吗? 我当然可以在接口中添加一个getManufacturer() 方法,但我很好奇 Parcelable 是如何强制静态字段的。

2) 继 1 之后,Android 如何访问该字段? 使用接口方法,您可以执行以下操作:

public void printManufacturer(Car car) {
    System.out.println(car.getManufacturer());
}

这将如何与字段一起使用?

我已经尝试研究它是如何工作的,但我发现的唯一答案是 it's not possible,但它以某种方式在这里完成。

【问题讨论】:

    标签: java android oop


    【解决方案1】:

    此界面不强制在语言级别使用该字段,因为这是不可能的。如果您不“实现”该字段错误,则该字段错误来自 Android lint。

    如果您好奇,这里是支票的源代码:ParcelDetector

    然后它使用反射来访问静态字段,因为它知道类名和字段名。

    【讨论】:

      猜你喜欢
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多