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
,但这可能会使代码更可读,所以我不确定。。。