use*_*587 0 java generics interface
我有一个名为ReportWriter的接口,它将报告写入OutputStream,Report类包含reportRow列表,也是一个抽象类:
public interface ReportWriter<T extends ReportRow> {
OutputStream writeReport(Report<T> report) throws ReportWriterException;
}
public abstract class Report<T extends ReportRow> {
private List<T> rows = Lists.newArrayList();
...
}
public abstract class ReportRow {...}
Run Code Online (Sandbox Code Playgroud)
现在我有CsvWriter实现ReportWriter,
public class CsvWriter<T extends ReportRow> implements ReportWriter {
@Override
public ByteArrayOutputStream writeReport(Report report) throws ReportWriterException {
...
for (T row : report.getRows()) { <-- incompatible type
..write here..
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它抱怨不兼容的类型:
require Object found T.
Run Code Online (Sandbox Code Playgroud)
我不理解在Report类中我已经指定T是ReportRow的子类,为什么我抱怨这个?
然后我尝试更新CsvWriter的writeReport,如下所示:
public class CsvWriter<T extends ReportRow> implements ReportWriter {
@Override
public ByteArrayOutputStream writeReport(Report<T> report) throws ReportWriterException { <--- complain here
...
}
Run Code Online (Sandbox Code Playgroud)
现在抱怨:
writeReport(Report<T> report) clashes with writeReport(Report report); both methods have same erasure.
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?谢谢
您需要使用泛型类型指定要实现的接口:
public class CsvWriter<T extends ReportRow> implements ReportWriter<T> {
Run Code Online (Sandbox Code Playgroud)
(注意ReportWriter<T>)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |