如何删除 "Assignment of parameter" is not allowed checkstyle 错误?
How to remove "Assignment of parameter" is not allowed checkstyle error?
我目前正在使用 Java 编写一个简化的学校课程系统,我正在使用 CheckStyle 检查样式。当我 运行 CheckStyle 在我的 类 之一上时,它给了我两个错误:
Assignment of parameter 'endTime' is not allowed.
Assignment of parameter 'startTime' is not allowed.
我尝试了多种方法来解决这个问题,因为我不能在使用该注释时只创建一个 setter。
顺便说一句,我也在使用 Eclipse。
public void setMeetingDaysAndTime(String meetingDays, int startTime, int endTime) {
if (meetingDays == null || meetingDays.length() == 0) {
throw new IllegalArgumentException("Invalid meeting days.");
}
if ("A".equals(meetingDays)) {
this.meetingDays = meetingDays;
startTime = 0;
endTime = 0;
这只是我发生错误的地方的一个片段。
startTime = 0;
这是重新分配参数startTime
。
你没有粘贴很多-如果startTime
是也是一个字段,这是不是分配字段.就像上面的行一样,您需要 this.startTime = 0
才能使用该字段(当您通过接受与场)。
或者,关闭此 lint checkstyle 错误,这很愚蠢。它试图避免在您的方法的 运行 期间混淆该值是什么,但修复需要创建一个新的局部变量,该变量本身至少同样令人困惑。换句话说,这是一种风格检查,它提出了一个点,即治愈方法比它所指向的疾病更糟糕。
如果您的意图确实是继续使用 setMeetingDaysAndTime
方法,就像 startTime
是 0
一样,那么创建一个新的局部变量:
public void setMeetingDaysAndTime(String meetingDays, int startTime_, ...) {
int startTime = startTime_;
if ( ... ) {
startTime = 0;
}
}
以下description is given for ParameterAssignment:
Disallows assignment of parameters.
Rationale: Parameter assignment is often considered poor programming
practice. Forcing developers to declare parameters as final is often
onerous. Having a check ensure that parameters are never assigned
would give the best of both worlds.
在你的情况下,
startTime = 0;
endTime = 0;
可能是错误而不是
this.startTime = 0;
this.endTime = 0;
取决于是否有字段 startTime
和 endTime
您实际想要的字段。
为了防止这个错误(当有参数与字段同名时),确保使用this.<fieldName> = ...;
或者setter方法参数使用前缀new
:
public void setMeetingDaysAndTime(String newMeetingDays, int newStartTime, int newEndTime) {
if (newMeetingDays == null || newMeetingDays.length() == 0) {
throw new IllegalArgumentException("Invalid meeting days.");
}
if ("A".equals(newMeetingDays)) {
meetingDays = newMeetingDays;
startTime = 0;
endTime = 0;
如果您真的想为参数分配一个新值,请改用具有描述性名称的变量。
示例:而不是像这样重新分配参数:
public void foo(String message, int value) {
message = message.trim();
value = value < 0 ? 0 : value;
bar(message, value);
改用局部变量:
public void foo(String message, int value) {
String trimmedMessage = message.trim();
int normalizedValue = value < 0 ? 0 : value;
bar(trimmedMessage, normalizedValue);
Eclipse 还提供 ParameterAssignment Checkstyle 警告作为 编译器警告(项目 > 属性:Java 编译器 > Errors/Warnings): 代码风格 > 参数赋值。而对于根本原因,如果 this.
被错误地缺少,则有编译器警告 Name shadowing and conflicts > Local variable declaration hides another field or variable 默认情况下也是禁用的。
我目前正在使用 Java 编写一个简化的学校课程系统,我正在使用 CheckStyle 检查样式。当我 运行 CheckStyle 在我的 类 之一上时,它给了我两个错误:
Assignment of parameter 'endTime' is not allowed.
Assignment of parameter 'startTime' is not allowed.
我尝试了多种方法来解决这个问题,因为我不能在使用该注释时只创建一个 setter。
顺便说一句,我也在使用 Eclipse。
public void setMeetingDaysAndTime(String meetingDays, int startTime, int endTime) {
if (meetingDays == null || meetingDays.length() == 0) {
throw new IllegalArgumentException("Invalid meeting days.");
}
if ("A".equals(meetingDays)) {
this.meetingDays = meetingDays;
startTime = 0;
endTime = 0;
这只是我发生错误的地方的一个片段。
startTime = 0;
这是重新分配参数startTime
。
你没有粘贴很多-如果startTime
是也是一个字段,这是不是分配字段.就像上面的行一样,您需要 this.startTime = 0
才能使用该字段(当您通过接受与场)。
或者,关闭此 lint checkstyle 错误,这很愚蠢。它试图避免在您的方法的 运行 期间混淆该值是什么,但修复需要创建一个新的局部变量,该变量本身至少同样令人困惑。换句话说,这是一种风格检查,它提出了一个点,即治愈方法比它所指向的疾病更糟糕。
如果您的意图确实是继续使用 setMeetingDaysAndTime
方法,就像 startTime
是 0
一样,那么创建一个新的局部变量:
public void setMeetingDaysAndTime(String meetingDays, int startTime_, ...) {
int startTime = startTime_;
if ( ... ) {
startTime = 0;
}
}
以下description is given for ParameterAssignment:
Disallows assignment of parameters.
Rationale: Parameter assignment is often considered poor programming practice. Forcing developers to declare parameters as final is often onerous. Having a check ensure that parameters are never assigned would give the best of both worlds.
在你的情况下,
startTime = 0;
endTime = 0;
可能是错误而不是
this.startTime = 0;
this.endTime = 0;
取决于是否有字段 startTime
和 endTime
您实际想要的字段。
为了防止这个错误(当有参数与字段同名时),确保使用this.<fieldName> = ...;
或者setter方法参数使用前缀new
:
public void setMeetingDaysAndTime(String newMeetingDays, int newStartTime, int newEndTime) {
if (newMeetingDays == null || newMeetingDays.length() == 0) {
throw new IllegalArgumentException("Invalid meeting days.");
}
if ("A".equals(newMeetingDays)) {
meetingDays = newMeetingDays;
startTime = 0;
endTime = 0;
如果您真的想为参数分配一个新值,请改用具有描述性名称的变量。
示例:而不是像这样重新分配参数:
public void foo(String message, int value) {
message = message.trim();
value = value < 0 ? 0 : value;
bar(message, value);
改用局部变量:
public void foo(String message, int value) {
String trimmedMessage = message.trim();
int normalizedValue = value < 0 ? 0 : value;
bar(trimmedMessage, normalizedValue);
Eclipse 还提供 ParameterAssignment Checkstyle 警告作为 编译器警告(项目 > 属性:Java 编译器 > Errors/Warnings): 代码风格 > 参数赋值。而对于根本原因,如果 this.
被错误地缺少,则有编译器警告 Name shadowing and conflicts > Local variable declaration hides another field or variable 默认情况下也是禁用的。