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

cha*_*ith 4 java android android-support-library android-design-library

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

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

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

Dmi*_*sev 7

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

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

  • @Solarnum弃用问题是即使你可以将类注释为"Deprecated"并且只是从头开始编写新类,你仍然**支持旧版本,因为遗留代码仍然依赖于它.当然,这不是你不能做的事情.但是,如果你一遍又一遍地重复这个过程,你的代码库就会变得一团糟.非公共类(特别是包私有类)的另一个原因是它们通常包含一些棘手的逻辑,需要深入了解底层框架(这也可以改变) - 对于UI尤其如此 (2认同)