簡體   English   中英

參數化方法有什么問題?

[英]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> { /* ... */ }

但是我的 IDE 顯示異常: 在此處輸入圖像描述 我哪里弄錯了?

問題是您沒有傳遞Map<Enum<E>,Job> ,而是傳遞了Map<TaskType,Job> 原因是 Java 中的 generics 不是協變的,盡管TaskTypeEnum<TaskType>並且唯一可能的Enum<TaskType> ,但 Java 類型系統中的Enum<TaskType>不是TaskType這一事實使情況變得復雜。

您需要更改方法的簽名以使用:

  • Map<TaskType,Job> (僅接受以TaskType作為鍵的映射),或
  • Map<E,Job>

同樣,最好也將taskType參數的類型更改為E

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM