![](/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.