首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除“参数赋值”不允许校验式错误?

如何删除“参数赋值”不允许校验式错误?
EN

Stack Overflow用户
提问于 2021-02-04 11:58:37
回答 2查看 2.2K关注 0票数 0

我目前正在用Java编写一个简化的学校课程系统,我正在用CheckStyle检查它的风格。当我在我的一个类上运行CheckStyle时,它给出了两个错误:

代码语言:javascript
运行
复制
Assignment of parameter 'endTime' is not allowed.
Assignment of parameter 'startTime' is not allowed.

我尝试过多种方法来解决这个问题,因为当我使用这个注释时,我不能仅仅创建一个setter。

我还在使用Eclipse顺便提一下。

代码语言:javascript
运行
复制
    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;

这只是我错误发生的地方的一个片段。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-04 14:12:26

下面的给出了ParameterAssignment的描述

不允许分配参数。 基本原理:参数分配通常被认为是糟糕的编程实践。强迫开发人员将参数声明为最终参数通常是很麻烦的。进行一次检查,确保参数从未被分配过,这将使这两个世界都发挥最大的作用。

在你的情况下

代码语言:javascript
运行
复制
startTime = 0;
endTime = 0;

可能是错误而不是

代码语言:javascript
运行
复制
this.startTime = 0;
this.endTime = 0;

这取决于您实际所指的字段startTimeendTime是否存在。

若要防止此错误(当存在与字段名称相同的参数时),请确保使用this.<fieldName> = ...;或对setter方法参数使用前缀new

代码语言:javascript
运行
复制
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;

如果确实希望为参数赋值,请使用带有描述性名称的变量。

示例:而不是重新分配参数,例如:

代码语言:javascript
运行
复制
public void foo(String message, int value) {
    message = message.trim();
    value = value < 0 ? 0 : value;
    bar(message, value);

使用局部变量代替:

代码语言:javascript
运行
复制
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声明隐藏另一个字段或变量,默认情况下也是禁用的。

票数 0
EN

Stack Overflow用户

发布于 2021-02-04 12:13:51

startTime = 0;

这是重新分配参数startTime

您没有粘贴太多--如果startTime也是一个字段,这是而不是分配该字段。就像上面的行一样,为了使用字段,您需要this.startTime = 0 (当您通过接受与字段同名的参数来隐藏字段时需要this. )。

或者,关闭这个棉格样式的错误,这是愚蠢的。在方法运行期间,它试图避免对该值的混淆,但是修复需要创建一个新的局部变量,它本身至少也同样令人困惑。换句话说,它是一个手写笔,它提出了一个点,治疗比它所指的疾病更糟糕。

如果您的目的是继续使用setMeetingDaysAndTime方法,就像startTime0一样,那么就创建一个新的局部变量:

代码语言:javascript
运行
复制
public void setMeetingDaysAndTime(String meetingDays, int startTime_, ...) {
    int startTime = startTime_;

    if ( ... ) {
        startTime = 0;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66045161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档