Java编码风格,局部变量与重复方法调用

标签 java coding-style

我更喜欢使用局部变量而不是多次调用同一个方法。

/*
 * I prefer this
 */
Vehicle vehicle = person.getVehicle()
if (vehicle instanceof Car) {
   Car car = (Car) vehicle;
   car.openSunroof();
} else if (vehicle instanceof Bike) {
   Bike bike = (Bike) vehicle;
   bike.foldKickstand();
}
/*
 * Rather than this
 */
if (person.getVehicle() instanceof Car) {
   Car car = (Car) person.getVehicle();
   car.openSunroof();
} else if (person.getVehicle() instanceof Bike) {
   Bike bike = (Bike) person.getVehicle();
   bike.foldKickstand();
}
  • 我相信第一种方法会执行得更快一些
  • 我认为第二种方式违反了DRY原则
  • 我发现第一种方式更具可读性和更易于调试(...可以忽略不计,因为我可以跳过)
  • 我不想处理对象状态改变的可能性

你更喜欢哪个,为什么?

最佳答案

出于您提到的所有原因,我更喜欢第一个版本。特别是(只是为了阐明你的第四点),这意味着你肯定会得到一致的结果......如果getVehicle(),你可能会在第二个版本中得到非常糟糕的结果。返回了 Car在第一次通话时,然后是 Bike在第二...

性能方面并不困扰我(例如,我会很高兴地反复调用 List.size()),但可读性、一致性和不重复都更为重要。从本质上讲,第一个片段比第二个片段更有效地传达了“获取值(value),然后使用它”的想法。

所以是的,我同意你...有人向你推荐第二种形式吗?

关于Java编码风格,局部变量与重复方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228392/

相关文章:

python - Python 中类 def 后的空格

c++ - 将 C++ 字符串拆分为多行(代码语法,不解析)

scala - 箭头反模式是 Scala 中的标准吗

c# - 是否可以将代码隐藏分解为多个部分文件?

java - 是否有一个不带参数、不返回任何内容并允许检查异常的 JDK 功能接口(interface)?

java - Grafana 仪表板将执行器池的 "boundedElastic"与 "parallel"分开

javascript - 使用 Javascript 从 YouTube Vid 中获取信息(代码需要改进)

java - java.lang.StackOverflowError 的根本原因

java - Mockito when() 方法不起作用并出现空指针异常

java - Spring MVC 在提交之前检查数据库中的用户名