我正在处理从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;
}
}
答案 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不适用于外部库。