You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java重构报错:setCode(int)方法不适用于无参调用

错误原因

这个报错的核心是方法调用的参数不匹配:

  • 你在Refactor类中定义的setCode(int)、setCompanyName(String)这类setter方法,都要求调用时必须传入对应类型的参数(比如setCode需要传一个int类型的code值);
  • 但你在AccData方法里调用这些setter时没有传任何参数,编译器认为你调用的方法不存在,所以抛出这个错误;
  • 而getter方法(比如getCode())本身就不需要参数,所以调用不会有问题。
解决方法

1. 直接修正:调用setter时传入对应参数

如果业务逻辑需要给这些属性赋值,调用时必须传入符合参数类型的值,比如:

Refactor refactor = new Refactor();
// 传入int类型的code参数
refactor.setCode(1001);
// 传入String类型的公司名称参数
refactor.setCompanyName("XX酒店");

2. 重载setter方法(支持无参调用)

如果需要让setter支持无参调用(比如设置默认值),可以在Refactor类中重载对应的setter方法,比如:

public class Refactor {
    private int code;
    private String companyName;

    // 原有的带参setter
    public void setCode(int code) {
        this.code = code;
    }

    // 新增无参setter,设置默认值
    public void setCode() {
        this.code = 0; // 默认code值
    }

    // 同理给companyName新增无参setter
    public void setCompanyName() {
        this.companyName = "默认公司";
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    // getter方法不变
    public int getCode() { return code; }
    public String getCompanyName() { return companyName; }
}

这样你既可以带参调用setter赋值,也可以无参调用设置默认值。

3. 更合理的代码去重方案:使用继承/组合

你创建Refactor的目的是代码去重,单独实例化Refactor并调用setter其实没达到复用的核心目的,推荐用以下两种方式:

方式一:继承(适合"is-a"关系)

让Accommodation继承Refactor,直接复用父类的属性和方法:

// Refactor类作为父类,属性设为protected(或保持private用setter/getter)
public class Refactor {
    protected int code;
    protected String companyName;

    public void setCode(int code) { this.code = code; }
    public int getCode() { return code; }
    // 其他setter/getter...
}

// Accommodation继承Refactor,直接使用父类的属性和方法
public class Accommodation extends Refactor {
    public static void AccData() {
        Accommodation acc = new Accommodation();
        acc.setCode(1001); // 直接调用父类的setter
        System.out.println(acc.getCode()); // 直接调用父类的getter
    }
}

方式二:组合(适合"has-a"关系)

让Accommodation持有Refactor的实例,通过这个实例复用方法:

public class Accommodation {
    // 持有Refactor实例
    private Refactor refactor = new Refactor();

    public static void AccData() {
        Accommodation acc = new Accommodation();
        acc.refactor.setCode(1001);
        System.out.println(acc.refactor.getCode());
    }

    // 可选:封装一层对外方法,隐藏内部的Refactor实现
    public void setAccCode(int code) {
        refactor.setCode(code);
    }

    public int getAccCode() {
        return refactor.getCode();
    }
}

内容的提问来源于stack exchange,提问作者Westrany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:43:13