[英]What's wrong with the parametrized method?
這是我運行計划任務的方法的簽名:
private <E extends Enum<E>, T extends Task<E>> void runJob(T task, Map<Enum<E>,
Job> taskTypeJobMap,
Enum<E> taskType,
JpaRepository<T, Long> repository)
這是運行前一個的方法:
private void runJob(TaskQueue task, Map<TaskType, Job> taskTypeJobMap) {
runJob(task, taskTypeJobMap, null, taskQueueRepository);
}
在這里你可以看到我的類是參數化的:(TaskType 是 Enum)
public class TaskQueue implements Task<TaskType> { /* ... */ }
public interface Task <T extends Enum<T>> { /* ... */ }
public interface TaskQueueRepository extends JpaRepository<TaskQueue, Long> { /* ... */ }
問題是您沒有傳遞Map<Enum<E>,Job>
,而是傳遞了Map<TaskType,Job>
。 原因是 Java 中的 generics 不是協變的,盡管TaskType
是Enum<TaskType>
並且唯一可能的Enum<TaskType>
,但 Java 類型系統中的Enum<TaskType>
不是TaskType
這一事實使情況變得復雜。
您需要更改方法的簽名以使用:
Map<TaskType,Job>
(僅接受以TaskType
作為鍵的映射),或Map<E,Job>
同樣,最好也將taskType
參數的類型更改為E
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.