Java 内联使用局部变量或链方法更好吗?

Java 内联使用局部变量或链方法更好吗?,java,coding-style,Java,Coding Style,如果我有一系列的方法调用,每次调用的值用于下一次调用,我是否应该将它们存储在局部变量中,如下所示: DynamicForm filledForm = Form.form().bindFromRequest(); String shareIdStr = filledForm.get("data[shareId]"); UUID shareId = UUID.fromString(shareIdStr); Share share = Share.find.byId(shareId); Share

如果我有一系列的方法调用,每次调用的值用于下一次调用,我是否应该将它们存储在局部变量中,如下所示:

DynamicForm filledForm = Form.form().bindFromRequest();
String shareIdStr = filledForm.get("data[shareId]");
UUID shareId = UUID.fromString(shareIdStr);
Share share = Share.find.byId(shareId);
Share share = Share.find.byId(UUID.fromString(Form.form().bindFromRequest().get("data[shareId]")));
或者作为单个调用链,如下所示:

DynamicForm filledForm = Form.form().bindFromRequest();
String shareIdStr = filledForm.get("data[shareId]");
UUID shareId = UUID.fromString(shareIdStr);
Share share = Share.find.byId(shareId);
Share share = Share.find.byId(UUID.fromString(Form.form().bindFromRequest().get("data[shareId]")));

在这种情况下,唯一再次使用的值是
share
。也许答案介于两者之间,或者完全不同。您的看法是什么?

第一种方法只有在以后的方法中重复使用这些变量时才有用。如果没有,Eclipse将告诉您它们没有被使用。所以我认为第二种方法更好

为了澄清一长串代码,我喜欢这样写:

Share share = Share.find
                   .byId(UUID.fromString(Form.form()
                                             .bindFromRequest()
                                             .get("data[shareId]")                                   
                                         )
                   );

取决于您希望如何读取代码。如果要再次使用局部变量,则它们很有用。否则继续进行链式调用。

如果您认为不重用变量,则只能比较这两种形式。否则,比较它们就没有意义了

一般来说,第一个变体使代码更可读,并可能使其更易于维护

就我个人而言,我为嵌入式系统开发了很多东西,目标平台在计算能力和规模上有很大的限制。因此,我通常内联代码,以便字节码更小

如果我要开发一个运行在功能强大的服务器甚至普通PC上的应用程序,那么我很可能会选择变体

非链接方法:

ADV

  • 提高可读性

  • 提供了重新使用的机会

  • 针点异常(如果有)变得更容易

  • 调试变得更容易,即在特定调用上设置断点更容易

  • DisADV

  • 增加代码的长度(我不会说大小:)

  • IDE警告(如果有)

  • 链接方法

    ADV

  • 减少了创建多个临时文件的需要。变量

  • 是一个

  • 减少要写入的行数

  • DisADV

  • 降低代码的可读性

  • 对于调用的特定方法,注释变得很困难(如果有)

  • 调试整个调用链变得非常困难


  • 显然没有一个“正确”的答案。我想如果你重用局部变量,就把它们存储起来。否则,通过链式方法调用来确定代码是否足够可读。值得注意的是,eclipse不会抱怨第一个示例,因为使用了每个变量once@RichardTingle你是对的,但是存储一个对象有什么意义呢?你只会在该行之后引用一次,而不会在该行之后引用一次。方法链接也可能是一个难题调试(例如,不能在链中的特定调用上设置断点)@ DurDalar,你是对的!我要补充一点。