SonarQube-Java-强制局部变量有效地为最终变量(不可修改)

问题描述 投票:0回答:1

我正在使用SonarQube,但是找不到Java的任何规则,该规则将报告局部变量的重新分配(可选地,方法参数或类字段也可以,但当然不在setter中),或者,换句话说,强制每个局部变量为有效最终

非编译示例

public Car createRedCar() {
  Car car = new Car();
  car.setColor(Color.RED);

  car = makeCool(car); // <- error, car variable was reassigned
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return car;
}

编译示例

public Car createRedCar() {
  Car car = new Car();
  car.setColor(Color.RED);

  Car coolCar = makeCool(car); // <- it's ok, because all local variables are effectively final
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return coolCar;
}

另一个编译示例

public Car createRedCar() {
  final Car car = new Car();
  car.setColor(Color.RED);

  final Car coolCar = makeCool(car); // <- it's also ok, but i don't want to force every variable to be final
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return coolCar;
}

我不想强迫每个变量都使用final关键字,只是为了使它们有效地成为final或final。

如果没有为此提供默认规则,我可以使用自定义规则和/或插件,或者最终甚至可以编写一个,但是有人可能已经这样做了,这就是为什么我要在这里发布。

我正在使用sonarqube-7.4,如果愿意,我愿意进行更新。

java sonarqube final rules local-variables
1个回答
0
投票

一个变量被初始化一次并且从未在其所有者类中进行过任何更改/修改,则它是final

© www.soinside.com 2019 - 2024. All rights reserved.