java在Bundle中,如何找到给定键的值的类型?
我是Android/Java新手。我想编写一个测试应用程序,其中打印我添加到(自定义)意图中的任意额外内容。
当我通过我的BroadcastReceiver
收到意向时,我可以通过以下方式获得所有额外的Bundle及其密钥:
Bundle bundle = intent.getExtras();
Set<String> keys = bundle.keySet();
如何找出与给定键关联的值的类型
我当时的想法是:
Object tmp = bundle.get(key);
// utilize https://stackoverflow.com/questions/709961/
但这似乎不是最好的主意。另一种选择似乎是:
if (bundle.getBoolean(key) == null) {
// can't determine if `null` was explicitly associated or not
} else if /* ... */
但这样我无法确定空值是否是有意的我可以创建一个自定义默认值类,但我不确定这是否是预期的方式编辑我刚刚意识到我需要一个相同类型的默认值,所以我甚至不能这样做。(不过,可以仔细检查null和自定义默认类型的值。)
如何动态地知道给定键的值的类型
# 1 楼答案
这是一个老问题,但我给了他一个优雅的新解决方案
如果需要,可以调用bundle。基于类型获取xxx,例如bundle。如果类型为“java.lang.String”,则为getString()
# 2 楼答案
我相信您无法确定类型,如果您发送了意图,那么您知道要接收什么,如果您从其他应用程序接收到意图,请阅读他们的文档。如果他们想让你使用它,他们会记录它:)
# 3 楼答案
也许我应该通过回答而不是评论来更好地解释我
你可以做你想做的事
如果你检查来自Android的源代码,你会看到类似的东西,它们总是传递包装器而不是原语类型
不同之处在于,他们不检查对象的类型,因为他们假设您知道自己在做什么
source