我有一个看起来像这样的课程:
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
类型。我不确定我在这里缺少什么。
答案 0 :(得分:2)
您可以按如下方式声明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>();
答案 1 :(得分:2)
如果您创建TrafficReportMapper<DayTrafficReport>
,您的方法将变为:
@Override
public DayTrafficReport mapRow(ResultSet rs, int rowNum) {
return new TrafficReport(....);
}
(不是因为仿制品被删除了,但它是一个很好的思考方式。)
但TrafficReport
不是 DayTrafficReport
的子类型,因此您无法像这样返回它。