我是 Android/Java 新手。我想编写一个测试应用程序,其中打印我添加到(自定义) Intent 的任意额外内容。
当我通过我的 BroadcastReceiver
收到 Intent 时,我可以获得所有额外的 Bundle和他们的 key :
Bundle bundle = intent.getExtras();
Set<String> keys = bundle.keySet();
如何找出与给定键关联的值的类型?
我的想法是这样的:
Object tmp = bundle.get(key);
// utilize https://stackoverflow.com/questions/709961/
但是这个way似乎不是最好的主意。另一种选择似乎是这样的:
if (bundle.getBoolean(key) == null) {
// can't determine if `null` was explicitly associated or not
} else if /* ... */
但这样我就无法确定空值是否有意为之。 我可以创建一个自定义默认值类,但我不确定这是预期的方式。 编辑 我刚刚意识到我需要一个相同类型的默认值,所以我什至不能这样做。 (不过,可以仔细检查 null 和自定义默认类型值以了解情况。)
我如何动态地知道给定键的值的类型?
最佳答案
也许我应该通过比评论更好的答案来更好地解释我。
你可以做你想做的事。
Object tmp = bundle.get(key);
if (tmp instanceof Boolean) {
boolean finalValue = ((Boolean)tmp).booleanValue();
}
如果您检查来自 Android 的源代码,您会看到类似的东西,它们总是传递包装器而不是原始类型。
public boolean More ...getBoolean(String key, boolean defaultValue) {
Object o = mMap.get(key);
if (o == null) {
return defaultValue;
}
try {
return (Boolean) o;
} catch (ClassCastException e) {
typeWarning(key, o, "Boolean", defaultValue, e);
return defaultValue;
}
}
不同之处在于它们不检查对象的类型,因为它们假设您知道自己在做什么。
关于java - 在 Bundle 中,如何找出给定键值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518956/