Java :如何处理空指针?

2019-12-31 11:16:04 +08:00
 sandman511
Integer code = getCode();
String codeMeaning = code == null ? null :
                    code == 1 ? "你好" :
                    code == 2 ? "你好好" :
                    code == 3 ? "你好好好";

请各大佬帮忙修改这段代码
code == null ? null 看起来有点怪怪的

5819 次点击
所在节点    程序员
57 条回复
kkkkkrua
2019-12-31 12:20:02 +08:00
switch 不就好了么,用 default 处理 null
sagaxu
2019-12-31 12:33:11 +08:00
应该用 int,避免 Integer,code 增加一项表示原来用 null 表示的情况。其实用 enum 不是更好吗?
Sqpan2
2019-12-31 12:35:54 +08:00
做个枚举不香吗?
sandman511
2019-12-31 12:43:05 +08:00
@Sqpan2
@sagaxu
@lhx2008
@matepi
不能用枚举哈,因为 code=1 不一定代表就是”你好“ 只是在这个地方等于”你好"
在另一个方法里可能就是”你好好好“
除非创建 7、8 个枚举类,每个枚举类中就三个参数。。
oneisall8955
2019-12-31 13:04:03 +08:00
var table=new HashMap<Integer,String>(){
{
put(k1,v1);
put(k2,v2);
// ...
}
};

table.get(xx)
zzzHas
2019-12-31 13:04:07 +08:00
如果能提高阅读性, 代码长点就长点.
looseChen
2019-12-31 13:26:14 +08:00
别特么的玩些花里胡哨的玩意
wesnow
2019-12-31 13:26:40 +08:00
代码更容易阅读比代码的长短重要得多,甚至可以说除非是非常极端的情况(比如有个地方确实对性能要求很高,这里就可能牺牲部分阅读性),否则都应该把代码更容易阅读更容易理解放在第一位。
qyvlik
2019-12-31 13:43:16 +08:00
@ipwx #15 这种查表法可还行。省去 if, switch 的逻辑判断。
wc951
2019-12-31 13:45:54 +08:00
java8 的 optional 是最优雅的
1et
2019-12-31 13:50:43 +08:00
int a = 1,b=2,c=3;
int d = a+++b+++c;
palmers
2019-12-31 13:59:27 +08:00
按照你回复的#24 我觉得可以使用枚举区分调用类别, 然后返回字符串抽象为方法 应该可以达到你的目的, 这么用确实不太好 除了秀也没有达到简洁的目的, 维护会越来越乱 临时用一下就没什么了
不知道你真是的需求是什么 就目前你暴露的意愿 我觉得 枚举+抽象可以很好的解决这个问题 也符合开闭原则
ymz
2019-12-31 14:09:37 +08:00
@kkkkkrua null 的话报空指针错误,到不了 default
guyeu
2019-12-31 14:10:15 +08:00
String result = switch (Objects.requireNonNullElse(code, 0)) {
case 0 -> null;
case 1 -> "你好";
case 2 -> "你好好";
case 3 -> "你好好好";
default -> throw new UnsupportedOperationException();
};
kkkkkrua
2019-12-31 14:12:16 +08:00
@ymz #33 学到了,谢谢
hhhsuan
2019-12-31 14:21:15 +08:00
代码的首要作用是给人看,只是随便可以运行一下。
oaix
2019-12-31 14:24:57 +08:00
Optional 一般只建议用在方法的返回值。
ilumer
2019-12-31 14:29:36 +08:00
optional+enum 或者 optional+map 在 map 里面写 if else 的逻辑
sandman511
2019-12-31 14:30:16 +08:00
@palmers 我又在主贴 APPEND 了一下真正的需求
earther01
2019-12-31 14:39:05 +08:00
@oaix 为啥呢,是效率不高吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/633824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX