Java 嵌入方法参数表达式是一种不好的做法吗?

Java 嵌入方法参数表达式是一种不好的做法吗?,java,code-structure,Java,Code Structure,通常认为在方法参数中嵌入表达式来构造代码是不好的做法吗?应该声明变量吗 (以Android代码段为例) 就我个人而言,我认为这看起来不错,但我只是想知道这是否被认为是令人厌恶的:)我几乎肯定会以多种方式简化这一点: EditText editText = (EditText) view.findViewById(R.id.fooEditText); String resourceName = someExpression ? R.string.true_expression_text

通常认为在方法参数中嵌入表达式来构造代码是不好的做法吗?应该声明变量吗

(以Android代码段为例)


就我个人而言,我认为这看起来不错,但我只是想知道这是否被认为是令人厌恶的:)

我几乎肯定会以多种方式简化这一点:

EditText editText = (EditText) view.findViewById(R.id.fooEditText);
String resourceName = someExpression ? R.string.true_expression_text
                                     : R.string.false_expression_text;
editText.setText(getResources().getString(resourceName));
我认为,在一条语句中完成这一切会使它更难阅读和调试。请注意,我在这里也删除了重复项,但使用了您在条件运算符的两个操作数中调用
getResources().getString(…)
,只是使用了不同的资源名称


我对原始代码的主要不满之处在于,对丢弃的结果调用一个方法,它引入了比您需要的更多的方括号,这通常令人困惑。

例如,我认为这取决于具体情况

player.setName(User.getName());
不过,如果火车失事,如下面所示,那就好了

player.setName(getGroup().getUsers().get(0).getName());
我要说的是,这是一种不好的做法,在关于火车失事危险的文章中也提到了这一点。@Jon Skeet提到的重复调用也是使用变量而不是方法调用的另一个原因。

单词“排斥”是你的,但它肯定描述了我的反应。我不能关注这个语句在做什么,因为它有一个if语句,一个搜索,并且在开始之前至少发生了5次解引用


我发现三元运算符特别有害,因为在解析其他所有内容时,我必须在头脑中保留两个不相交的状态集。有些人喜欢简洁而不是局部变量(我不是其中之一),但是嵌入在其他语句中的三元运算符(或任何其他分支)尤其不可移动。如果你因为喜欢复杂的语句而忽略了其他干净的代码或类似的工作,那么至少要把条件句分离出来。

我甚至不会把后一种代码称为火车失事。它仍然比问题中的代码简单得多。我同意它比OP提到的代码简单得多(特别是由于三元运算符),我只是想把它作为一个简单的例子。我想我可能不得不买那本书。
player.setName(getGroup().getUsers().get(0).getName());