错误&穿线

时间:2015-02-22 05:57:34

标签: java multithreading

我正在构建一个小型Java应用程序来计算部门的每月费用:

  • 员工:抽象超类,包含getExpenses();
  • 开发人员:子类,实现getExpenses(),返回1000
  • QATester:子类,实现getExpenses(),返回500
  • 经理:显示
  • MainClass:显示

目前正在使用MainClass。我有2个问题/区域我想要一些输入。 1)从这些行中获取这些错误。

Manager managerA = new Manager(tester1, dev1);
Manager managerB = new Manager(managerA);

此行有多个标记 - 构造函数Manager(QATester,Developer)未定义 - 管理员无法解析为类型

2)我是线程新手并考虑在线程上运行此应用程序,可能会添加UI,建议/示例?

感谢。

package main;

import expenseApp.Developer;
import expenseApp.Manager;
import expenseApp.QATester;

public class MainClass {

    public static void main(String[] args) 
    {
        QATester tester1 = new QATester();
        Developer dev1 = new Developer();
        Manager managerA = new Manager(tester1, dev1);
        Manager managerB = new Manager(managerA);
    }
}

package expenseApp;

import java.util.ArrayList;

public class Manager extends Employee
{
    private ArrayList<Manager> managerList;
    private ArrayList<Employee> employeeList;

    public void add(Employee employee) 
    {
        if(employee instanceof Manager) 
        {
            managerList.add((Manager) employee);
        }
        else 
        {
            employeeList.add(employee);
        }
    }

    @Override
    public int getExpenses() 
    {
         return 300;
    }

    public int getTotalExpenses() 
    {
        int totalExpenses = 0;

        for(Manager manager : managerList)
        {
            totalExpenses += manager.getTotalExpenses();
        }

        for(Employee employee : employeeList)
        {
            totalExpenses += employee.getExpenses();
        }

        return totalExpenses;
    }

1 个答案:

答案 0 :(得分:1)

问题1 :由于某种原因,您的主叫代码无法找到Manager课程。虽然它很奇怪,因为错误发生在构造函数行而不是import行(通常是这种情况),我建议先修改构造函数(请参阅下一节)进入cannot be resolved into a type错误,因为它可能是后续错误。

此外,您的Manager类没有定义任何构造函数,它隐式定义了默认(空)构造函数:

public Manager() {
}

您需要提供所需的所有构造函数。从您的代码我猜你想要这样的东西:

public Manager(List<Manager> managers, List<Employee> employees) {
    this.managers = new ArrayList<>(managers);
    this.employees = new ArrayList<>(employees);
}

问题2 :&#34;在线程上运行&#34; - 您的应用程序已在线程main线程上运行。你想做什么让你认为你需要线程?虽然添加UI可能是一个有效的响应,但是有可能在没有显式线程的情况下构建UI。我的建议是尽可能简单地保持它,从我看到的,你现在不需要多线程,而且我不会引入很多{{3除非有必要。