我一直致力于员工管理计划,目前我有一个班级(HR),一个抽象的员工班,有2个子班级(经理和SalesPerson)。目前在HR功能中,我有一个函数应该返回一个依赖于用户输入的员工类型,但目前得到错误
incompatible types: unexpected return value
以下是其他类的代码。
HR(功能片段,而非全班)
public Employee createNewEmployee(int index)
{
switch(index)
{
case 0:
idTracker++;
return new Manager(idTracker, nameField.getText(), Double.parseDouble(salaryField.getText()));
break;
case 1:
idTracker++;
return new SalesPerson(idTracker, nameField.getText(), Double.parseDouble(salaryField.getText()));
break;
default:
System.out.println("Didn't work");
}
}
员工类
public abstract class Employee
{
protected double salary;
protected String name;
protected int IDNumber;
protected String jobTitle;
protected String dateEmployed;
public Employee(int ID, String n, double s)
{
IDNumber = ID;
setName(n);
setSalary(s);
}
}
Salesperson类(经理类是相同的,但在字符串jobTitle中有不同之处,以显示其经理)
public class SalesPerson extends Employee
{
public SalesPerson(int ID, String n, double s)
{
super(ID, n, s);
jobTitle = "Sales Person";
}
}
答案 0 :(得分:2)
任何方法都应该始终返回声明的返回类型的值。但是在你的函数createNewEmployee
中存在一个不返回任何值的执行路径,编译器然后尝试发出一个简单的返回,唉这与声明的Employee
类型不兼容。例如,您可以在默认情况下添加return null
。
请注意,createNewEmployee
名称异常严重,创建暗示新,然后将其命名为createEmployee
或newEmployee
(第一个是更常见的情况。)
答案 1 :(得分:0)
如果在返回新实例的其中一行中发生错误(例如return new Manager(...)
),则可能表示预期作为返回值的Employee
类与Employee
类,由两个子类SalesPerson
和Manager
扩展。
如果Employee
返回值与两个子类扩展的Employee
类相同,请检查HR类中的导入。也许您导入的Employee
类具有相同的名称,但来自不同的包。