【问题标题】:Is it safe to use classes annotated with @RestrictTo使用带有 @RestrictTo 注释的类是否安全
【发布时间】:2017-11-24 19:57:14
【问题描述】:

我找到了 RoomSQLiteQuery 类的一个很好的用法,但是它被 @RestrictTo 注释了。甚至认为 IDE 显示警告,它编译正常,而且看起来也正常工作。

@RestrictTo 仅在我们不应该使用某些东西时发出警告,它实际上并不能禁止您使用它,对吗?它总是能在生产中工作吗?

所以我只是想检查一下,以确保它会起作用。

没有必要给出建议“不要使用它,那很糟糕......”,我只是问它是否安全使用。 (甚至认为你可能会问我,如果你真的感兴趣,我为什么需要 :))

编辑:

我已经从 room 生成的文件中复制了使用 RoomSQLiteQuery(使用 @RestrictTo 注释的类)的代码。因此,如果我无法使用,那么房间在生成代码时如何使用 IT 呢?因为房间生成的类在同一个包中。
也不是只有使用访问修饰符才能限制某些类/函数/whaterever的使用吗?

【问题讨论】:

  • 实际上,您应该无法使用该 API。我猜是因为 room 是一个外部库,这就是你能够使用该类的原因。否则,如果它来自 SDK,您将无法使用它。
  • 我已经从 room 生成的文件中复制了使用 RoomSQLiteQuery(使用 @RestrictTo 注释的类)的代码。因此,如果我无法使用,那么在生成代码时如何使用房间。也不是只有使用访问修饰符才能限制某些类/函数/whaterever的使用吗?

标签: java android android-room


【解决方案1】:

@RestrictTo

表示注释元素只能在特定范围内访问(由 RestrictTo.Scope 定义)。

它用于表示特定代码块是为特定目的而编写的,并且可能不打算在该范围之外使用。

这可能意味着很多没有上下文的事情:库的创建者可能不想对用于非预期目的的代码负责 - 特别是当我们谈论由操作系统的创建者支持的库时。

正如他们在源代码中记录的那样,这个类被用作中介和

这个类用作保存绑定参数的中间位置,以便我们可以运行 使用正确类型的游标查询,而不是将所有内容都作为字符串传递。

您始终可以复制代码(具有适当的归属并与许可证保持一致!),但随后您会失去复制代码的第 3 方库的支持 - 因为他们从未打算将其用于外部。

简而言之,一般建议不要使用@RestrictedTo 类,如果使用,请做好自己维护的准备

【讨论】:

  • 谢谢,我只用了一个功能。
  • @captainserious 哪里提到不建议使用@RestrictedTo?这背后的原理是什么?
猜你喜欢
  • 2016-04-05
  • 2012-02-02
  • 2023-04-08
  • 2018-03-24
  • 1970-01-01
  • 2019-11-18
  • 2014-12-19
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多