Java 是否有一种更简洁的方法可以用不同的参数编写相同的方法?

Java 是否有一种更简洁的方法可以用不同的参数编写相同的方法?,java,methods,overloading,Java,Methods,Overloading,我需要有多个不同参数的方法。有没有更干净的方法来编写这些方法,而不是单独声明它们中的每一个?我总共需要4个相同的方法。我能写一个,但让它决定传递什么参数吗?或者我必须复制和粘贴第一个3次并更改参数。这里有两个 public String findLogNumber(XWPFWordExtractor we) { int logIndex; int logIndexEnd; String logNumber = ""; if (we.getText().contai

我需要有多个不同参数的方法。有没有更干净的方法来编写这些方法,而不是单独声明它们中的每一个?我总共需要4个相同的方法。我能写一个,但让它决定传递什么参数吗?或者我必须复制和粘贴第一个3次并更改参数。这里有两个

public String findLogNumber(XWPFWordExtractor we) {
    int logIndex;
    int logIndexEnd;
    String logNumber = "";
    if (we.getText().contains("Log ")) {
        logIndex = we.getText().indexOf("Log ") + 4;
        logIndexEnd = logIndex + 5;
        logNumber = we.getText().substring(logIndex, logIndexEnd);
    }
    return logNumber;
}

public String findLogNumber(WordExtractor we) {
    int logIndex;
    int logIndexEnd;
    String logNumber = "";
    if (we.getText().contains("Log ")) {
        logIndex = we.getText().indexOf("Log ") + 4;
        logIndexEnd = logIndex + 5;
        logNumber = we.getText().substring(logIndex, logIndexEnd);
    }
    return logNumber;
}

编写一个方法,将
we.getText()
作为
字符串
,并从其他两个方法调用:

public String findLogNumber(XWPFWordExtractor we) {
  return common(we.getText());
}

public String findLogNumber(WordExtractor we) {
  return common(we.getText());
}

private String findLogNumber(String text) {
  // ...
}
当然,除非
xwpfordextractor
WordExtractor
实现公共接口或扩展同一类。在这种情况下:

public String findLogNumber(CommonInterface we) { ... }

xwpfordextractor
WordExtractor
extend
org.apache.poi.POITextExtractor
都定义了
getText()
方法,因此对于那些将
POITextExtractor
作为参数的方法,您只需要一个方法

// Handles at least the two methods shown.
public String findLogNumber(POITextExtractor we) {
    int logIndex;
    int logIndexEnd;
    String logNumber = "";
    if (we.getText().contains("Log ")) {
        logIndex = we.getText().indexOf("Log ") + 4;
        logIndexEnd = logIndex + 5;
        logNumber = we.getText().substring(logIndex, logIndexEnd);
    }
    return logNumber;
}

例如,使用genericsDo
WordExtractor
xwpfordextractor
有一个包含
getText()
方法的公共接口/超类?旁白:如果
不使用
contains
那么
indexOf
,您可以在
之外使用
indexOf
,如果
,并检查返回值是否为
=0
。只需两次完成相同的工作即可。@reporter泛型在这里没有帮助。泛型仅在需要将泛型参数约束为与其他参数相关(例如,相关元素类型的两个列表)或希望参数与返回值相关时才真正有用。@AndyTurner,但两个方法的主体相同。唯一的区别是传递的参数。最后,Kayaman将它们的超类用作“泛型类型”。-)这与我的答案之间的细微差别是,这将接受任何
POITextExtractor
;我的只允许你通过这两种特定类型的考试。以下哪一项更可取完全取决于你想做什么;但是,除非你有充分的理由不允许某些子类型,否则这种方法会更简单。我是Apache POI的新手。谢谢你的回答!:)是的,Andy的答案更一般(因此也更有用),而我的答案非常具体地针对POI的这个特殊案例。