我目前正在用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;这只是我错误发生的地方的一个片段。
发布于 2021-02-04 14:12:26
不允许分配参数。 基本原理:参数分配通常被认为是糟糕的编程实践。强迫开发人员将参数声明为最终参数通常是很麻烦的。进行一次检查,确保参数从未被分配过,这将使这两个世界都发挥最大的作用。
在你的情况下
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检查样式警告,也作为编译器警告(项目>属性: Java >错误/警告):代码样式>参数赋值。对于根本原因,如果this.错误地丢失了,编译器就会警告名称隐藏和冲突> Local声明隐藏另一个字段或变量,默认情况下也是禁用的。
发布于 2021-02-04 12:13:51
startTime = 0;
这是重新分配参数startTime。
您没有粘贴太多--如果startTime也是一个字段,这是而不是分配该字段。就像上面的行一样,为了使用字段,您需要this.startTime = 0 (当您通过接受与字段同名的参数来隐藏字段时需要this. )。
或者,关闭这个棉格样式的错误,这是愚蠢的。在方法运行期间,它试图避免对该值的混淆,但是修复需要创建一个新的局部变量,它本身至少也同样令人困惑。换句话说,它是一个手写笔,它提出了一个点,治疗比它所指的疾病更糟糕。
如果您的目的是继续使用setMeetingDaysAndTime方法,就像startTime是0一样,那么就创建一个新的局部变量:
public void setMeetingDaysAndTime(String meetingDays, int startTime_, ...) {
int startTime = startTime_;
if ( ... ) {
startTime = 0;
}
}https://stackoverflow.com/questions/66045161
复制相似问题