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