n61*_*007 7 java primitive android bundle android-intent
我是 Android/Java 新手。我想编写一个测试应用程序,其中打印我添加到(自定义)意图的任何任意额外内容。当我收到我的意图时BroadcastReceiver,我可以通过以下方式获取所有额外的捆绑包及其密钥:
Bundle bundle = intent.getExtras();
Set<String> keys = bundle.keySet();
Run Code Online (Sandbox Code Playgroud)
如何找出与给定键关联的值的类型?
我的想法是这样的:
Object tmp = bundle.get(key);
// utilize /sf/ask/49697301/
Run Code Online (Sandbox Code Playgroud)
但这种方式似乎并不是最好的主意。另一种选择似乎是这样的:
if (bundle.getBoolean(key) == null) {
// can't determine if `null` was explicitly associated or not
} else if /* ... */
Run Code Online (Sandbox Code Playgroud)
但这样我就无法确定空值是否是有意的。我可以创建一个自定义默认值类,但我不确定这是预期的方式。 编辑我刚刚意识到我需要相同类型的默认值,所以我什至不能这样做。(不过,可以仔细检查 null 和自定义默认类型值来了解。)
如何动态知道给定键的值的类型?
也许我应该通过比评论更好的答案来更好地解释我。
你可以做你想做的事。
Object tmp = bundle.get(key);
if (tmp instanceof Boolean) {
boolean finalValue = ((Boolean)tmp).booleanValue();
}
Run Code Online (Sandbox Code Playgroud)
如果你检查 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;
}
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于,他们不检查对象的类型,因为他们认为您知道自己在做什么。
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |