Java 字符串的三元运算符-有更好的方法吗?

Java 字符串的三元运算符-有更好的方法吗?,java,syntax,styles,Java,Syntax,Styles,我很关心这个结构: String out = "Text " + (obj==null ? "" : obj.getStr()+" ") + "text continues."; 这很管用,但我觉得很难看。也许我太挑剔了 无论如何,我在问,有没有更好的方法来做这类事情?或者这是普遍接受的技术?使用StringBuilder: final StringBuilder sb = new StringBuilder("Text "); if (obj != null) sb.append(o

我很关心这个结构:

String out = "Text " + (obj==null ? "" : obj.getStr()+" ") + "text continues.";
这很管用,但我觉得很难看。也许我太挑剔了


无论如何,我在问,有没有更好的方法来做这类事情?
或者这是普遍接受的技术?

使用
StringBuilder

final StringBuilder sb = new StringBuilder("Text ");
if (obj != null)
    sb.append(obj.getStr()).append(' ');
final String out = sb.append("text continues.").toString();
还有,为什么
.getStr()
obj
没有实现
.toString()


请注意,如果
obj
确实实现了
.toString()
,您可以比使用Guava的Joiner做得“更好”:

private static final Joiner JOINER = Joiner.on(" ").skipNulls();

//

final String out = JOINER.join("Text", obj, "text continues.");

但归根结底,这是一个风格问题。

使用
StringBuilder

final StringBuilder sb = new StringBuilder("Text ");
if (obj != null)
    sb.append(obj.getStr()).append(' ');
final String out = sb.append("text continues.").toString();
还有,为什么
.getStr()
obj
没有实现
.toString()


请注意,如果
obj
确实实现了
.toString()
,您可以比使用Guava的Joiner做得“更好”:

private static final Joiner JOINER = Joiner.on(" ").skipNulls();

//

final String out = JOINER.join("Text", obj, "text continues.");

不过,归根结底,这是一个风格问题。

我更喜欢它,因为它简洁

另一种方法是简单的旧if-then-else:

String toAdd = "";
if(object != null) {
    obj.getStr() + " ";
}
String out = "Text " + toAdd  + "text continues.";

我更喜欢它,因为它简洁

另一种方法是简单的旧if-then-else:

String toAdd = "";
if(object != null) {
    obj.getStr() + " ";
}
String out = "Text " + toAdd  + "text continues.";

首先,您可以从格式中分离出逻辑:

String out = String.format("Text %stextcontinues",
                           obj == null ? "" : obj.getStr() + " ");

首先,您可以从格式中分离出逻辑:

String out = String.format("Text %stextcontinues",
                           obj == null ? "" : obj.getStr() + " ");

我认为,无论如何,编译器都会使用StringBuilder。但是你认为这更优雅吗?
StringBuilder
在构造字符串时被推荐使用。嗯,
String
串联中的三元运算符是。。。好难懂的;难以理解的我认为,无论如何,编译器都会使用StringBuilder。但是你认为这更优雅吗?
StringBuilder
在构造字符串时被推荐使用。嗯,
String
串联中的三元运算符是。。。好难懂的;难以理解的虽然我同意fge的回答,但这个问题可能更适合右图,我是否应该删除它?我只是想找出一些意见。最好是关闭而不是删除,但这是我个人的意见,其他人可能不同意。@MightyWork不认为现在可以删除,因为您已经回答了。我也可以将其移至codereview,但恐怕只有mods可以这样做。。嗯,毕竟,如果他们遇到它,他们可以做到这一点。尽管我同意fge的答案,但这个问题可能更适合右翼,我是否应该删除它?我只是想找出一些意见。最好是关闭而不是删除,但这是我个人的意见,其他人可能不同意。@MightyWork不认为现在可以删除,因为您已经回答了。我也可以将其移至codereview,但恐怕只有mods可以这样做。。嗯,毕竟,如果他们遇到它,他们可以做到这一点。请随意标记,这里有一个。