我有一个抽象类调用Task
,它由Task1
继承
public abstract class Task<STATUS extends Enum> {
STATUS getStatus();
void setStatus(STATUS status);
}
public class Task1 extends Task<TaskStatusEnum> {
private TaskStatusEnum status;
public Task1() {}
public TaskStatusEnum getStatus() { return status; }
public void setStatus(TaskStatusEnum status) { this.status = status; }
}
// Task2, Task3, Task4, ...
public enum TaskStatusEnum {
PLANNED, STARTED, FINISH, FAILED;
}
我正在try 创建一个目标是更新任务状态的类
public class StateMachine {
public StateMachine() {}
public void startMultipleTasks(List<Task> tasks) {
tasks.stream().forEach(task -> task.setStatus(TaskStatusEnum.STARTED));
}
}
为什么不编译以下代码:
Task1 myTask = new Task1();
StateMachine stateMachine = new StateMachine();
List<Task1> allTasks = List.of(myTask);
stateMachine.startMultipleTasks(allTasks); // Compilation error ; Required type: List<Task> Provided: List<Task1>
但这确实是:
Task1 myTask = new Task1();
StateMachine stateMachine = new StateMachine();
stateMachine.startMultipleTasks(List.of(myTask));
我知道我可以将变量allTasks
存储在List<Task>
中,但我需要在代码中稍后使用List<Task1>
.
注意:我使用的是Java 17