我是java的新手,所以请放轻松我.我有一个hashmap,其中包含String键和布尔值,如下所示.
Map<String, Boolean> states = new HashMap<String, Boolean>();
states.put("b_StorageAvailable", true);
states.put("b_StorageWritable", true);
Run Code Online (Sandbox Code Playgroud)
我从一个函数返回.一旦我在其他地方得到这个,我希望能够在其中一个上调用if语句来查看它的真或假.
if(states.get("b_StorageAvailable")) {
//Do this
}
Run Code Online (Sandbox Code Playgroud)
但java一直告诉我,我需要这是一个布尔类型,它是一个Map类型.我怎么能这么容易做到?
UPDATE
应该注意的是,我调用函数并获取返回值的代码如下所示,
Map states = this.getExternalStorageStatus();
Run Code Online (Sandbox Code Playgroud)
假设您使用的是Java 5或更高版本(您必须使用它,因为演示了Generics的使用):
if(Boolean.TRUE.equals(states.get("b_StorageAvailable"))){
//Do this
}
Run Code Online (Sandbox Code Playgroud)
你的代码看起来很好.只需确保使用完全相同的密钥("b_StorageAvailable").因为Booleanin Map是自动装箱的原始布尔值,如果Map提供的键中没有条目,你将得到一个NullPointerException.
我还会检查你的函数的返回类型和局部变量是否也被定义HashMap<String, Boolean>.如果是无类型,那么你将无法假设它是一个Boolean在Map.
public static void main(String[] args) {
Map<String, Boolean> states = new HashMap<String, Boolean>();
states.put("b_StorageAvailable", true);
states.put("b_StorageWritable", true);
if(states.get("b_StorageAvailable")){ // works fine!
System.out.println("storage is available!");
}
Map states2 = new HashMap<String, Boolean>(); // untyped!
states.put("b_StorageAvailable", true);
states.put("b_StorageWritable", true);
if(states2.get("b_StorageAvailable")){ // Type mismatch: cannot convert from Object to boolean
System.out.println("storage is available!");
}
}
Run Code Online (Sandbox Code Playgroud)
所以你需要做的就是改变
Map states = this.getExternalStorageStatus();
Run Code Online (Sandbox Code Playgroud)
至
Map<String, Boolean> states = this.getExternalStorageStatus();
Run Code Online (Sandbox Code Playgroud)
并且可以改变返回类型 getExternalStorageStatus()
private Map<String,Boolean> getExternalStorageStatus(){
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17001 次 |
| 最近记录: |