繁体   English   中英

为什么某些类在Android支持库中不公开?

[英]Why are some classes not public in the Android Support Library?

为什么Android库中包含的某些类不公开? 对我来说,这没有任何实际意义,基本上只是为最近发布的一些错误的小部件开发临时修复程序的障碍。

具体来说,我在谈论Android设计支持库中TextInputLayout 例如,如果我想创建一个自定义窗口小部件来覆盖构造函数中的某些代码,我就不能这样做,因为CollapsingTextHelper不是公共类。 我必须下载源代码并将相关的类复制到我的项目中,但实际上没有任何东西阻止我这样做。 那么首先不公开的重点是什么呢?

据我所知,随着时间的推移,库会得到更新和改进,您只需添加@Deprecated注释即可指示特定类是旧的还是过时的,并且只是为了防止遗留代码中断。
我知道一个库只是简单地公开所有类是没有意义的,但是我不明白为什么对于实现一个小部件必不可少的类不应该公开。 为什么他们不能只在其中一个类被更好的版本替换时添加@Deprecated注释,或者什么时候以完全不同的方式实现小部件呢?

简而言之 - 通过使这些类非公开,他们保留随时更改/删除此类的权利,而不会破坏任何客户端(您的)代码。

看看已经有多少@Deprecated方法/类,你会明白为什么这很重要。

一旦将公共类添加到库中,您基本上必须维护它。 你不能简单地删除它,因为这将是一个突破性的变化。 因此,您只能将其标记为@Deprecated并继续维护它的时间远远超过实际使用它的时间。


它不仅仅是一个被弃用的课程。 主要是我在谈论API和实现细节之间的区别。

如果窗口小部件的内部工作方式不公开,则Google可以完全更改实现,而无需将这些类标记为已弃用。 从长远来看,这具有多个优点。

他们可以删除和添加类并更改有关它们的所有内容,而无需担心保持向后兼容性。 如果第三方开发人员想要使用一些非公开课程,他或她可以很容易地做到这一点。

在Android Studio或IntelliJ中,只需右键单击类并选择"Go to" -> "Declaration"或使用以下快捷方式,即可查看支持库的源代码:

  • Mac: + B
  • Windows: Ctrl + B.

从那以后,将相关的类复制到项目中,修改它们并随意使用它们非常简单。


我只想说,在99%的情况下,无论如何你都不需要这样做。 谷歌肯定会考虑哪些类应该公开,因此是API的一部分,而这只是小部件实现的一部分。

出于同样的原因,java中的每个其他类/字段/变量(而不仅仅是)都具有访问修饰符。

如果它不公开,则不打算使用它(根据上下文,封装等适用于其他修饰符的规则)。

它可能是为了增强或帮助图书馆的深奥功能。

如需特定答案,请将您的问题扩大。 您想使用哪个课程并非公开,您认为它应该是?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM