java - 错误和线程

标签 java multithreading

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

  • Employee:抽象父类(super class),包含 getExpenses();
  • 开发者:子类,实现 getExpenses(),返回 1000
  • QATester:子类,实现 getExpenses(),返回 500
  • 经理:所示
  • 主类:显示

目前正在开发 MainClass。我有 2 个问题/领域需要一些意见。 1)从这些行中获取这些错误。

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

该行有多个标记 - 构造函数管理器(QATester,开发人员)未定义 - 管理器无法解析为类型

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:由于某种原因,您的调用代码无法找到 Manager 类。虽然这很奇怪,因为错误发生在构造函数行而不是 import 行(通常是这种情况),但我建议先修复构造函数(请参阅我的下一节),然后再研究 cannot be returned to a type 错误,因为它可能是后续错误。

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

public Manager() {
}

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

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

问题 2:“在线程上运行”- 您的应用程序已经在线程(main 线程)上运行。您想要做什么让您认为需要线程?虽然添加 UI 可能是有效的响应,但您也可以在没有显式线程的情况下构建 UI。我的建议是尽可能保持简单,从我看来,您现在不需要多线程,而且我不会介绍大量 synchronization issues除非有必要。

关于java - 错误和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655029/

相关文章:

multithreading - Delphi MREW 实现对读者有利吗?

python - 使用 threading 和 tkinter 模块在 python 中停止线程并避免 'RuntimeError' 的最佳方法是什么?

java - 如何使用 moxy 挖掘性能问题

java - 有没有更简单的方法来获取 Java 数组的最后一个元素?

java - 将 String 转换为另一个类中的数组名称

c - 一个线程控制多个其他线程

python - 线程中的 PyV8 - 如何让它工作?

java - join() 不会阻塞其他线程(主线程除外)?

java - 对涉及 azure ad b2c 的安全 REST API 进行基于角色的访问

c# - 正确退出使用 .NET 4.0 任务的 .net 控制台应用程序