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

cro*_*wne 11 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();
}
Run Code Online (Sandbox Code Playgroud)
  • 我相信第一种方式是更快一点
  • 我认为第二种方式违反了DRY原则
  • 我发现第一种方式更易读,更容易调试(......可以忽略不计,因为我可以跳过)
  • 我不想要处理改变对象状态的可能性

你更喜欢哪个?为什么?

Jon*_*eet 8

出于你提到的所有原因,我更喜欢第一个版本.特别是(只是说明你的第四点),这意味着你肯定会获得一致的结果......如果在第一次调用时getVehicle()返回a Car,那么你可能会在第二个版本中得到可怕的令人讨厌的结果,然后是Bike第二个版本. ..

表演方面并没有打扰我(List.size()例如,我会愉快地反复打电话),但可读性,一致性和非重复性都更为重要.基本上,第一个片段传达了"获取价值,然后使用它"的想法比第二个更有效.

所以是的,我和你在一起......有人向你推荐第二种形式吗?


fas*_*ava 3

是的,第一个肯定更好。我永远不会采用第二种方法。但你应该考虑更多地使用多态性。如此严重地依赖instanceof并不是好的 OO 设计。

  • 很好的一点,这可以让它变得更加干净。但是,您可能正在寻找一个通用接口,例如可以在每个类中单独实现的prepareForJourney()。然而,我们经常使用第三方或遗留类,这些类可能不适合轻松应用新接口,但我认为它们可以被包装,并将接口应用到包装器。 (2认同)