如何调用void类的参数?

时间:2014-11-11 13:23:00

标签: java itext text-extraction

我正在处理从pdf中提取文本。为此我写了自己的文本提取 战略。我有一个动态类,在这个类中我调用文本提取策略。 但是,当我向动态类引入一些参数时,我不能在策略类中使用它们。要明确我在下面添加我的代码模板。

我的问题很简单,是否可以从renderText中调用“get_intro”类中显示的参数unq?或者其他方面,可以在“get_intro”中调用在“renderText”类中创建的变量或参数吗?

public class trial {

public trial(){}

    public  Boolean get_intro(String pdf, String unq){

    try { ....

            for (int j = 1; j <= 3; j++) {
            out.println(PdfTextExtractor.getTextFromPage(reader, j, semTextExtractionStrategy));
            }
...} catch (Exception e) {
        e.printStackTrace();
    }

semTextExtractionStrategy部分:

public class SemTextExtractionStrategy implements TextExtractionStrategy {
    @Override
public void beginTextBlock() {
}

@Override
public void renderText(TextRenderInfo renderInfo) {                       

    text = renderInfo.getText();...}

    @Override
public void endTextBlock() {
}

@Override
public void renderImage(ImageRenderInfo renderInfo) {
}

@Override
public String getResultantText() {
    //return text;
    return main;
}
}

1 个答案:

答案 0 :(得分:0)

可以考虑以下有问题的解决方案:

public abstract class DefaultTextExtractionStrategy<D>
       implements TextExtractionStrategy {
    protected D documentInfo;

    public final void setDocumentInfo(D documentInfo) {
        this.documentInfo = documentInfo;
    }

public class SemTextExtractionStrategy extends DefaultTextExtractionStrategy<SemDoc> {
    @Override
    public void beginTextBlock() {
        documentInfo ...
    }

public class SemDoc {
    public String unq:
}

在get_intro中:

       SemDoc semDoc = new SemDoc();
       semDoc.unq = unq;
       semTextExtractionStrategy.setDocumentInfo(semDoc);
       out.println(PdfTextExtractor.getTextFromPage(reader, j, semTextExtractionStrategy));

问题是你想在调用entry函数时传递一些上下文类(比如ActionEvent等)。但就其名称而言,战略类可能是无国籍的单身人士。在上面的解决方案中,您需要从Class<TextExctractionStrategy>, Class<D>实例化一个新的策略实例。或者像在MouseAdapter类中一样,将相同的事件类参数传递给每个方法。

这种过度设计的气味&#34;或者是偏斜的模式应用。

当我们处于Java 8 lambdas的边缘时,你甚至可以考虑一个&#34; backport&#34; lambda的设计。

但是目前我会为每个被调用的函数添加一个通用D textExtractionContext,如果API不适用于外部库。