![](/img/trans.png)
[英]Incompatible Generic Types: Cannot specify sub-type when using .class with generic type
[英]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.