Java 有没有更简短的方法来写这个?
我想知道是否可以用一行的形式写这封信Java 有没有更简短的方法来写这个?,java,Java,我想知道是否可以用一行的形式写这封信 if (config.getBoolean("storecommands.use-time")) { out.println("[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " + e.getMessage()); else { out.println(e.getMessage()); } out.close(); 我想可能是这样的
if (config.getBoolean("storecommands.use-time")) {
out.println("[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " + e.getMessage());
else {
out.println(e.getMessage());
}
out.close();
我想可能是这样的:
(config.getBoolean("storecommands.use-time")) ? first : last;
但后来我想起,这只适用于设置变量
有人知道像第一个代码块这样的东西是否可以写在一行中,不带括号,等等。你可以使用这样的三元代码(但它很难看,你仍然需要close()或flush()
//在别处构造此常量日期格式,并保存引用!
DateFormat df=新的简化格式(“MM/dd/yy HH:MM:ss”);
//这是丑陋的,但也是可能的。
out.println((config.getBoolean(“storecommands.use time”)?
“[”+df.format(new Date())+“]:”)
+e.getMessage());
out.close();// 您可以使用这样的三元组(但它很难看,仍然需要close()或flush()
//在别处构造此常量日期格式,并保存引用!
DateFormat df=新的简化格式(“MM/dd/yy HH:MM:ss”);
//这是丑陋的,但也是可能的。
out.println((config.getBoolean(“storecommands.use time”)?
“[”+df.format(new Date())+“]:”)
+e.getMessage());
out.close();// 不是一行,而是两行:
out.println(config.getBoolean("storecommands.use-time")) ?
"[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date())
+ "]: " + e.getMessage()) : e.getMessage());
out.close();
但这可能是我见过的最糟糕的事情,你永远不应该在生产代码中这样做。如果你这样做,我会知道,我们会找到你。不是一行,而是两行:
out.println(config.getBoolean("storecommands.use-time")) ?
"[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date())
+ "]: " + e.getMessage()) : e.getMessage());
out.close();
但这可能是我见过的最糟糕的事情,你永远不应该在生产代码中这样做。如果你这样做,我会知道,我们会找到你。你可以在这里使用条件运算符,但它可能会以可读性为代价,所以我会重新考虑。在任何情况下,您都可以执行以下操作:
boolean b = config.getBoolean("storecommands.use-time");
String message = e.getMessage();
out.println(b ?
"[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " + message
:
message);
在一行中编写这些内容是个糟糕的主意,因此我将其拆分为多行。您可以在这里使用条件运算符,但它可能会以可读性为代价,因此我会重新考虑。在任何情况下,您都可以执行以下操作:
boolean b = config.getBoolean("storecommands.use-time");
String message = e.getMessage();
out.println(b ?
"[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " + message
:
message);
private String foo(boolean b) {
if(b) {
return new String("[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: ");
} else {
return "";
}
把这些都写在一行上是个糟糕的主意,所以我把它分成了多行
private String foo(boolean b) {
if(b) {
return new String("[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: ");
} else {
return "";
}
然后简单地这样做:
out.println(foo(config.getBoolean("storecommands.use-time") + e.getMessage());
out.close();
然后简单地这样做:
out.println(foo(config.getBoolean("storecommands.use-time") + e.getMessage());
out.close();
是的,但可读性比长度(合理的数量)更重要
此外,我还使用了一个三元条件,该条件将注入格式化的日期或字符串为空,从而允许我们自由添加e.getMessage
一次
out.println((config.getBoolean("storecommands.use-time") ? "[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " : "") + e.getMessage());
out.close();
是的,但可读性比长度(合理的数量)更重要
此外,我还使用了一个三元条件,该条件将注入格式化的日期或字符串为空,从而允许我们自由添加e.getMessage
一次
out.println((config.getBoolean("storecommands.use-time") ? "[" + (new SimpleDateFormat("MM/dd/yy HH:mm:ss")).format(new Date()) + "]: " : "") + e.getMessage());
out.close();
你所拥有的有什么问题吗?@SotiriosDelimanolis一点都没有,它工作得很好,我只是想知道这是否可能。也许我把这个贴错了网站?很抱歉如果是,我将删除。@ElliottFrisch您不能使用?:
使用void
返回类型声明的方法。@jdersen我没有否决你,但我可以想象有人在读到诸如“?:只适用于设置可验证项”之类的毫无根据的声明时会感到不安。@SotiriosDelimanolis这是正确的,但这与此有什么关系?你所拥有的有什么问题?@SotiriosDelimanolis一点都没有,它很好用,我只是想知道是否可能。也许我把这个贴错了网站?很抱歉如果是,我将删除。@ElliottFrisch您不能使用?:代码>使用void
返回类型声明的方法。@jdersen我没有投你反对票,但我可以想象有人在读到诸如“?:仅适用于设置可验证项”之类的毫无根据的声明时会感到不安。@SotiriosDelimanolis这是正确的,但这与此有什么关系?+1用于只使用一次e.getMessage()。有两个回复使用了它两次。@Ingo,谢谢,这是最短的回复,我没有格式化它。+1表示只使用了一次e.getMessage()。有两个回复使用了两次。@Ingo,谢谢,这是最短的回复,我并没有格式化它。啊,天哪,这也很糟糕。他们都很坏。用火洗净他们。有人在一个有用的答案中投了一个小笑话的票吗?你为什么用e.getMessage()
?这就是这个密码的坏处。天哪,这也不好。他们都很坏。用火洗净他们。有人在一个有用的答案中投了一个小笑话的票吗?你为什么用e.getMessage()
?这就是这段代码的坏处。你这样做的方式确实不太可读。我会问自己,为什么有人会写两次e.getMessage()
。@Ingo只使用一次的回复也会用空字符串连接它。@Ingo我已经分解出e.getMessage()
。我不确定还有多少事情可以做。我认为这里的否决票太多了。+1您甚至可以将b
重命名为useTime
,但这可能会使代码更具可读性,因此我不确定……您这样做的方式确实不太具可读性。我会问自己,为什么有人会写两次e.getMessage()
。@Ingo只使用一次的回复也会用空字符串连接它。@Ingo我已经分解出e.getMessage()
。我不确定还有多少事情可以做。我认为这里的否决票太多了。+1您甚至可以将b
重命名为useTime
,但这可能会使代码更可读,所以我不确定。。。