参数过多的构造函数
Constructors with too many parameters
不用透露太多,我正在制作一个具有 9 个属性的对象。让我们以角色扮演游戏为例。
float strength, constitution, fortitude, dexterity, intelligence, charisma, wisdom, willpower, perception;
鉴于对象名为player,
的构造函数
public Player(float strength, float constitution, float fortitude, float dexterity,
float intelligence, float charisma, float wisdom, float willpower, float perception){}
根据 SonarLint:
"Constructor has 9 parameters, which is greater than 7 authorized."
虽然我知道 SonarLint 说这不会阻止代码实际运行,但如果有 "proper" 处理这些情况的方法,我很想知道!
谢谢
P.s,如果这个问题是错误的论坛,请指出正确的论坛!
尝试使用Builder Pattern,这种方法非常适合类 4+参数
理想情况下,您会将 class 拆分成更小的单元并进行组合。
在这种情况下,因为它们似乎都是同一类东西,所以 Map
(具体来说 EnumMap
)似乎是合适的。
作为最后的手段,有建造者模式。
Player player = Player.builder()
.strength( )
.constitution( )
// ...
.perception( );
尝试构建器模式
final class Player {
private final float strength;
...
static final class Builder {
private float strength;
...
Builder setStrength(float strength) {
this.strength = strength;
return this;
}
...
Player build() {
return new Player(this);
}
}
private Player(Builder builder) {
strength = builder.strength;
...
}
...
public static void main(String[] args) {
Player player = new Player.Builder()
.setStrength(18)
.setConsitution(18)
.setFortitude(18)
.build();
}
}
定义一个函数有很多 arguments.Ideally 它应该有 2 到 3 个参数 only.In 如果有比指定参数更多的情况,那么你可以这样做以下任何一项。
- 通过包装参数(有点逻辑
参数分组)。
- 使用上面指定的构建模式
- 仅提供必需参数的多个构造函数。
- 使用 setter 方法做一些事情,如果你可以使用某些参数。
不用透露太多,我正在制作一个具有 9 个属性的对象。让我们以角色扮演游戏为例。
float strength, constitution, fortitude, dexterity, intelligence, charisma, wisdom, willpower, perception;
鉴于对象名为player,
的构造函数public Player(float strength, float constitution, float fortitude, float dexterity,
float intelligence, float charisma, float wisdom, float willpower, float perception){}
根据 SonarLint: "Constructor has 9 parameters, which is greater than 7 authorized."
虽然我知道 SonarLint 说这不会阻止代码实际运行,但如果有 "proper" 处理这些情况的方法,我很想知道!
谢谢
P.s,如果这个问题是错误的论坛,请指出正确的论坛!
尝试使用Builder Pattern,这种方法非常适合类 4+参数
理想情况下,您会将 class 拆分成更小的单元并进行组合。
在这种情况下,因为它们似乎都是同一类东西,所以 Map
(具体来说 EnumMap
)似乎是合适的。
作为最后的手段,有建造者模式。
Player player = Player.builder()
.strength( )
.constitution( )
// ...
.perception( );
尝试构建器模式
final class Player {
private final float strength;
...
static final class Builder {
private float strength;
...
Builder setStrength(float strength) {
this.strength = strength;
return this;
}
...
Player build() {
return new Player(this);
}
}
private Player(Builder builder) {
strength = builder.strength;
...
}
...
public static void main(String[] args) {
Player player = new Player.Builder()
.setStrength(18)
.setConsitution(18)
.setFortitude(18)
.build();
}
}
定义一个函数有很多 arguments.Ideally 它应该有 2 到 3 个参数 only.In 如果有比指定参数更多的情况,那么你可以这样做以下任何一项。
- 通过包装参数(有点逻辑 参数分组)。
- 使用上面指定的构建模式
- 仅提供必需参数的多个构造函数。
- 使用 setter 方法做一些事情,如果你可以使用某些参数。