if 函数的未定义运算符 - Java

Undefined operator for if function - Java

我正在尝试编写一个简单的 if 函数来计算某人是否有资格获得奖金。这是在具有以下字段的 "Employee" class 中完成的:

private int id = 0;
private String forename;
private String surname;
private Salary salary;
private CompanyPosition companyPosition;

这是 IF :

public boolean eligibleForBonus() {    
    boolean isEligible = true;
    if (salary >= 40000) {
        isEligible = true;
    }
    return isEligible;
}

薪水是另一个class有一个字段

private double salary = 0.0;

(还定义了所有 getter 和 setter)

但是,我在带有 IF 的行上收到错误消息:

The operator >= is undefined for the argument type Salary, int

salary 是一个对象引用,您不能将对象引用与原始类型(除非它的包装器)进行比较。

你应该比较一下 if (salary.getSalary() >=40000)

您正在尝试检查您的对象 Salary 是否 >= 40000。您需要使用您 salary 成员的 getter Salary class.

if (salary.getSalary() >= 40000) {
    isEligible = true;
}

此外,您实际上并不需要方法中的布尔值和 if:

public boolean eligibleForBonus() {
    return salary.getSalary() >= 40000
}

你不应该用 null.

初始化 String 变量

你应该这样做salary.getSalary() >= 40000,薪水是一个对象,你想比较它的字段的值"salary"(虽然命名很奇怪)。

顺便说一句:你永远不会 return false,你的 init 是错误的而且没用。

您只需调用 getter 即可从类型为 Salarysalary 对象中检索工资:

if ( salary.getSalary() >= 40000)

请注意,您的整个方法可以像这样更简单地编写:

public boolean eligibleForBonus(){
    return salary.getSalary() >= 40000;
}

作为旁注,您当前的方法无法正常工作,因为您将 isEligible 标志初始化为 true 而不是 false (因此该方法将始终 return true不管工资是多少)。

您还可以引入一个常量来保存奖金所需的最低工资并将其用于其他地方。这避免了使用幻数,并正确记录了 40000 数字的含义。

private static final double MINIMUM_SALARY_FOR_BONUS = 40000;

public boolean eligibleForBonus(){
    return salary.getSalary() >= MINIMUM_SALARY_FOR_BONUS;
}