Java 8提交匿名函数

时间:2016-03-11 12:20:25

标签: java

我尝试用Java 1.8的新功能更新我的知识。 我正在使用流程进行大量工作,但在某些情况下,我不确定是否有新功能可以解决我的问题。

也许有人可以查看以下工作示例(关于旧的itext):

public static Document createListingPDF(List<PdfPageData> pages, String file)
{
    return createListing(PdfWriter.class, pages, file);
}

public static Document createListingRTF(List<PdfPageData> pages, String file)
{
    return createListing(RtfWriter2.class, pages, file);
}

private static Document createListing(Object ident, List<PdfPageData> pages, String file)
{
    Document document = new Document();
    try
    {
        if(ident == PdfWriter.class)
            PdfWriter.getInstance(document, new FileOutputStream(file));
        if(ident == RtfWriter2.class)
            PdfWriter.getInstance(document, new FileOutputStream(file));
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return document;
}

我的目标是使用Java 8将一种Funktion提交给包含“任何”Writer-Class的“createListing”,并使用方法内的文档执行“getInstance”。

这只是一个如何处理它的头脑风暴。 :) (我不想将文档的init移动到两个调用方法(想想重复的代码)

如果你有更多的调用方法可以通过类检查增加try块,那么好处将是明确的。

希望我描述了以我对脑海中的戈尔迪结的思考方式引导讨论的良好意愿:P

1 个答案:

答案 0 :(得分:1)

您缺少的不是Java 8功能。它是一种普通的多态性。

使PdfWriter和RtfWriter2实现相同的DocumentWriter接口,并将DocumentWriter传递给您的createListing方法;如下所示:

public static Document createListingPDF(List<PdfPageData> pages, String file) {
    return createListing(new PdfWriter(new FileOutputStream(file)), pages);
}

public static Document createListingRTF(List<PdfPageData> pages, String file) {
    return createListing(new RtfWriter2(new FileOutputStream(file)), pages)
}

private static Document createListing(DocumentWriter writer, List<PdfPageData> pages) {
    Document document = new Document(pages);
    writer.write(document);
    return document;
}