簡體   English   中英

使用泛型時不兼容的類型

[英]Incompatible type when using generic

我有一堂課,看起來像這樣:

public class TrafficReportMapper implements RowMapper<TrafficReport> {

   @Override
   public TrafficReport mapRow(ResultSet rs, int rowNum) {
     // Do something here
     return new TrafficReport(....);
   }
}

TrafficReport是POJO,我想它的東西,如延長DayTrafficReport並創建擴展新的映射TrafficReportMapper 因此,我將TrafficReportMapper更改如下:

public class TrafficReportMapper<T extends TrafficReport> implements RowMapper<T> {

   @Override
   public T mapRow(ResultSet rs, int rowNum) {
     // Exactly the same code as before
     return new TrafficReport(....);
   }
}

只有這次我得到

不兼容的類型:必填T; 找到了TrafficReport

但事實是, TrafficReport必須為T類型。 我不確定我在這里缺少什么。

您可以按以下方式聲明您的class

public class TrafficReportMapper<T extends TrafficReport> implements RowMapper<TrafficReport> 

... 假設:

interface RowMapper<T>  {
    public T mapRow(ResultSet rs, int rowNum);
    ...
}

然后,如果您有:

class TrafficReport{}

...和...

class DayTrafficReport extends TrafficReport{}

您可以這樣初始化:

TrafficReportMapper<DayTrafficReport> trm = new TrafficReportMapper<DayTrafficReport>();

如果創建TrafficReportMapper<DayTrafficReport>方法將變為:

@Override
public DayTrafficReport mapRow(ResultSet rs, int rowNum) {
    return new TrafficReport(....);
}

(由於泛型已被刪除,這並不是真的,但這是考慮它的好方法。)

但是TrafficReport 不是一個亞型DayTrafficReport ,所以你不能這樣回去。

暫無
暫無

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

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