如何删除 "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 方法,就像 startTime0 一样,那么创建一个新的局部变量:

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;

取决于是否有字段 startTimeendTime 您实际想要的字段。

为了防止这个错误(当有参数与字段同名时),确保使用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 默认情况下也是禁用的。