我正在尝试在我的Android应用程序(Kotlin)中使用Bundle,但我不了解API的文档。
https://developer.android.com/reference/android/os/Bundle.html
例如:
public void putFloat(String key, float value)
好的,看起来很简单,但是为什么函数没有重载为:
public void put(String key, float value)
此外,为什么没有:
public void putInt(String key, Int value)
或
public void put(String key, Int value)
我知道将API组合在一起的程序员必须非常聪明,并花一些时间考虑他们的API,所以我一定不能理解。我不明白什么?
谢谢。
编辑:
让我澄清一下为什么要问这个问题,因为我不喜欢下面的回答:
如果API没有过载,那么如何完成某些编程任务。例如,如果我使用泛型类型,程序员将如何知道要调用哪个函数?如果在调用get方法之前未放置密钥,该怎么办?使用默认值类型重载的方法是否可以解决此问题?如果put类型与给定键的get类型不匹配,会发生什么?
API似乎会竭尽全力避免重载(IMHO,一种基本的面向对象功能),重载将解决很多我所看到的问题。该API是否更有可能编写得不好,或者我不了解某些基本知识?我要和我一起去理解一些基本的东西,或者至少很有可能我不了解一些东西。
由于我对此API的困惑似乎导致我缺乏重载,因此我将问题集中在此。如果共识是“没有过载,因为它没有过载。”,那么我知道我根本没有缺失,希望通过不假设作者没有Dunning-Kruger效应来避免知道他们在做什么。
Android将Bundle用于实验性Saved State模块,并且在内部使用它。我试图了解Bundle API,以便可以有效使用Saved State模块。阅读Bundle API文档使我感到非常困惑,以至于我发现我对如何阅读文档有些不了解。如下所述,我缺少文档的一个方面。我当时以为这些文档已过时,Google忘记了对其进行更新,因此我应该忽略它们。
也许我不理解应用程序程序员对Bundle API的预期用途?也许Bundle API仅供内部使用,而我看不到一些继承的类集?也许...???我无法推测我不知道的事。
有人可能会回答:“切勿直接使用Bundle API。它是为低级使用而编写的'C'接口,他们在API版本1.0中公开了它,因为忘记了将其标记为过时。您应该使用class而是使用SomeBundleDerived类。这些文档太旧了,请忽略它们。”顺便说一句,这个答案会让我开心。
还是API的设计不佳?我讨厌认为这种原油被认为是Saved State模块中默认值的基础,但是如果这是正在发生的事情……我现在想知道。
我不喜欢人们如何在Stackoverflow上对待想要获得帮助的其他人。提出与预期不同的问题然后将其击落而不是仅仅回答所提出的问题的策略具有不受欢迎的学习效果。我厌倦了人们声称他们想帮助他人的虐待,但实际上是在散布陈词滥调并声称自己具有优越性。生活,最好是不涉及帮助他人了解技术资料的生活。
如果愿意,您可以在下面填写回复,我不会读。虐待不值得回答。
答案 0 :(得分:0)
为什么函数没有重载为:
public void put(String key, float value)
可能与getter名称平行。在Java中,不能有两个具有相同名称和相同参数列表的方法,只是返回类型不同。因此,我们需要getFloat()
与getInt()
,getBoolean()
等进行区分。在Bundle
上,他们选择按照相同的约定来命名设置器。在Intent
上获得额外奖金的人没有。
但是,一般来说,形式为“开发人员X为什么做出决策Y?”的问题。对于Stack Overflow而言并不是很好,因为通常只有Developer X才能回答。其他所有人都可以提供猜测。
而且,为什么没有
public void putInt(String key, Int value)
那是从BaseBundle
继承的。