我正在尝试为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();
    ...
}


然后在子类中,我有类似这样的内容,在该类中,我将类专门化为特定的碧玉导出器类型。

public class CsvExport extends ExportBase<JRCsvExporter>{
    protected void setExporter() { exporter = new JRCsvExporter();}
    ...
}


问题是我收到一个编译错误,说

error: type argument JRCsvExporter is not within bounds of type-variable ExporterType

但是JRCsvExporternet.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> {


考虑到它是一个后代,我认为可以使其成为我的类型参数约束的基础,因为它在所有不同的导出器类型之间共享并且具有我需要的所有方法。如果有更好的方法来实现我要完成的任务,请告诉我。

最佳答案

除了新版本外,我错误地使用了旧版本的库。删除旧版本可解决此问题。

关于java - 包装Jasper报告导出器时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33420150/

10-12 06:25