【发布时间】:2015-06-26 22:43:54
【问题描述】:
为什么 Android 库中包含的某些类不公开?对我来说,这没有任何意义,基本上只是为开发临时修复最近发布的一些漏洞百出的小部件引入了障碍。
具体来说,我说的是Android Design Support Library 中的TextInputLayout。
例如,如果我想创建一个自定义小部件来覆盖构造函数中的一些代码,我不能这样做,因为CollapsingTextHelper 不是公共类。我必须下载源代码并将相关的类复制到我的项目中,但实际上并没有任何东西阻止我这样做。那么一开始不公开又有什么意义呢?
据我了解,随着时间的推移,库会不断更新和改进,您只需添加 @Deprecated 注释即可指示特定类已过时或已过时,并且仍然存在以防止遗留代码中断。
我知道图书馆简单地将所有类公开是没有意义的,但我不明白为什么对小部件的实现至关重要的类不应该公开。当其中一个类被更好的版本替换时,或者当小部件以完全不同的方式实现时,他们为什么不能只添加 @Deprecated 注释?
【问题讨论】:
-
你能说得更具体点吗?这可以广义地解释为询问 OO 封装的优点是什么。
-
您是否正在尝试制作自定义小部件,但您不想从 android 小部件类扩展? (你不小心写了超类,它应该是子类)。为什么你不想从小部件类扩展?有什么原因吗?
-
我编辑了我的问题,希望能弄清楚我真正问的是什么。如果它仍然令人困惑或不清楚,那么也许我的问题真的很愚蠢。但至少我会知道你为什么知道
-
这不仅仅是一个被弃用的类。如果小部件的内部工作不公开,Google 可以完全更改实现,而无需将类标记为已弃用。他们可以删除和添加类并更改有关它们的所有内容,而不必担心保持向后兼容性。如果第三方开发人员想要使用一些非公共类,他无论如何都可以很容易地做到这一点。在 Android Studio 或 IntelliJ 中可以一键/热键查看支持库的源代码并将其复制到自己的项目中。
-
@Xaver 非常感谢。
标签: java android android-support-library android-design-library