将Enum成员传递给构造函数:"实际和正式的参数列表长度不同"

Har*_*ffa 3 java enums constructor

我很困惑,我认为我做的事情非常愚蠢,我只是看不到它!

中央供暖控制:

一个散热器类和RadiatorSize类.Radiator有一个size实例变量,它是Class RadiatorSize.我有XSMALL,...... XLARGE用于散热器的尺寸; 在RadiatorSize中定义为公共枚举.

所以,我在想,创造一个新的散热器并给它一个MEDIUM尺寸.

size = new RadiatorSize(RadiatorSize.Size.MEDIUM);
Run Code Online (Sandbox Code Playgroud)

Netbeans告诉我这个:

...\CentralHeating\src\hardwaremodel\Radiator.java:17:
error: constructor RadiatorSize in class RadiatorSize cannot be
applied to given types;

size = new RadiatorSize(RadiatorSize.Size.MEDIUM);
required: no arguments
found: Size
reason: actual and formal argument lists differ in length
1 error
Run Code Online (Sandbox Code Playgroud)

这是违规的课程.

/** Radiator class **/
package hardwaremodel;

import units_constants.RadiatorSize;

public class Radiator {
    private int boilerSequence;
    private RadiatorSize size;
    private double volume; //cubic centimetres

public void Radiator(int blrSqnc) {
    boilerSequence = blrSqnc;
    size = new RadiatorSize(RadiatorSize.Size.MEDIUM); //ERROR HERE
    }
}


/** RadiatorSize class **/
package units_constants;

public class RadiatorSize {
    public enum Size {XSMALL, SMALL, MEDIUM, LARGE, XLARGE};

    private Size size;

    public void RadiatorSize(Size sz) {
        size = sz;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,Netbeans给了我一个提示,它建议在units_constants.RadiatorSize中创建Constructor RadiatorSize(units_constants.RadiatorSize.Size); 当我同意时它会这样做:

public RadiatorSize(Size size) {
    throw new UnsupportedOperationException("Not yet implemented");
}
Run Code Online (Sandbox Code Playgroud)

现在编辑器中现在没有小红圈,但是......!

我很困惑.

jlo*_*rdo 5

您正在尝试将其用作构造函数:

public void RadiatorSize(Size sz) {
        size = sz;
}
Run Code Online (Sandbox Code Playgroud)

因为这不是构造函数,而是一种void方法,你的new RadiatorSize(Size.MEDIUM);尝试调用没有参数的标准构造函数.知道这一点,给出的错误信息是完全有道理的;)

只是摆脱void返回类型,它应该工作正常.