Closed CaveNightingale closed 4 years ago
更何况你这里没有考虑ClassCastException的问题,如果考虑的话代码可以改成
public static Operator deserialize(Map<String, Object> map) {
Object name = map.get("name"), level = map.get("level");
return new Operator(name instanceof String ? (String)name : null, level instanceof Integer ? (Integer)level : null);
}
转换异常我暂时没有考虑过会不会发生,但是上面的简便方法我应该已经在教程中提到过了
?> **更简便的方法** 如果你看过 **Bukkit** 的 **Javadoc**,你可以直接使用 `getConfig().getInt(key, 0)`,这个语句将直接判断 `key` 下是否有值,若没有,则写入默认值 `0`,其实,你如果直接写 `getConfig().getInt(key)`,即使 `key` 下没有任何值,也不会出问题,因为它本身就默认是 `0`,但注意,这些是 **Bukkit** 自动处理过的!
教程原本我更加注重逻辑,并没有考虑过简便方法,但是我已经将简便的代码添加进教程了
?> **更简便的方法** 如果你看过 **Bukkit** 的 **Javadoc**,你可以直接使用 `getConfig().getInt(key, 0)`,这个语句将直接判断 `key` 下是否有值,若没有,则写入默认值 `0`,其实,你如果直接写 `getConfig().getInt(key)`,即使 `key` 下没有任何值,也不会出问题,因为它本身就默认是 `0`,但注意,这些是 **Bukkit** 自动处理过的!以下是简便的版本
```java
public static Operator deserialize(Map<String, Object> map) {
return new Operator((String) map.get("name"), (Integer)map.get("level"));
}
重点是你这里的空检查完全多余 因为你检查完map.get("name")为空之后又给name赋了空 那你这里空检查意义何在?
这就跟
if(x == 0) {
x = 0;
}
一样没有逻辑
好的,已修改
https://valkyrie.ela.ac.cn/#/./source/Part03/3.4-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6?id=%e5%ba%8f%e5%88%97%e5%8c%96%e8%87%aa%e5%ae%9a%e4%b9%89%e5%af%b9%e8%b1%a1
上面这个函数和下面这个函数没有任何区别,因为你判断完空指针之后又把它name和level赋值为空,这和直接保留空指针没有区别 注意上面这段函数执行4次get操作,下面这段函数只执行2次get操作,耗时更低 并且下面这个函数长度远远小于上面这个,可读性更强