我正在尝试为Jasper报告导出器创建一个包装器。
下面我有一个基类定义。
import net.sf.jasperreports.export.*;
import net.sf.jasperreports.export.Exporter;
abstract public class ExportBase<ExporterType extends Exporter< ExporterInput, ? extends ReportExportConfiguration,? extends ExporterConfiguration, ? extends ExporterOutput>>{
protected ExporterType exporter;
abstract protected void setExporter();
...
}
然后在一个子类中,我有类似这样的东西,我将该类专门用于特定的jasper导出器类型。
public class CsvExport extends ExportBase<JRCsvExporter>{
protected void setExporter() { exporter = new JRCsvExporter();}
...
}
问题是我收到编译错误
error: type argument JRCsvExporter is not within bounds of type-variable ExporterType
但JRCsvExporter
来自net.sf.jasperreports.export.Exporter
来自
public class JRCsvExporter extends JRAbstractCsvExporter<CsvReportConfiguration, CsvExporterConfiguration, JRCsvExporterContext>
然后
public abstract class JRAbstractCsvExporter<RC extends CsvReportConfiguration, C extends CsvExporterConfiguration, E extends JRExporterContext> extends JRAbstractExporter<RC, C, WriterExporterOutput, E> {
然后
public abstract class JRAbstractExporter<RC extends ReportExportConfiguration, C extends ExporterConfiguration, O extends ExporterOutput, E extends JRExporterContext> implements JRExporter<ExporterInput, RC, C, O> {
然后
public interface JRExporter<I extends ExporterInput, IC extends ReportExportConfiguration, C extends ExporterConfiguration, O extends ExporterOutput> extends Exporter<I, IC, C, O> {
最后
public interface Exporter<I extends ExporterInput, IC extends ReportExportConfiguration, C extends ExporterConfiguration, O extends ExporterOutput> {
鉴于它是一个后代,我认为它可以使它成为我的类型参数约束的基础,因为它在所有不同的导出器类型之间共享并且具有我需要的所有方法。如果有更好的方法来实现我想要做的事情,请告诉我。
答案 0 :(得分:1)
除了新版本之外,我错误地使用了旧版本的库。删除旧版本解决了这个问题。