在我的程序中,我使用了大量的字符串和StringBuilder。我想摆脱StringBuilder toString()方法,并始终使用CharSequence。但是,我需要访问indexOf方法(该方法在StringBuilder和String中都可用,但在其他实现中不可用)。我应该如何实现一个接口,使这个函数可以被调用?
好的,您可以通过为已知类型硬编码测试并在其他情况下“手动”执行来轻松地完成此操作:
public static int indexOf(CharSequence input, String needle) {
if (input instanceof String) {
String text = (String) input;
return text.indexOf(needle);
}
if (input instanceof StringBuilder) {
StringBuilder text = (StringBuilder) input;
return text.indexOf(needle);
}
// TODO: Do this without calling toString() :)
return input.toString().indexOf(needle);
}
在硬编码类型方面,这样做看起来相当丑陋,但它能够运行。
public class Strings{
public static int indexOf(String input, String c){
return input.indexOf(c);
}
public static int indexOf(StringBuilder input, String c){
return input.indexOf(c);
}
public static int indexOf(YourClass input, String c){
return input.indexOf(c);
}
}
这样,您可以为每个具有实现的类型调用Strings.indexOf(whatever)
。这将通过让编译器/jvm选择要使用的方法来使您的代码保持清洁。
input
的类型是YourClass
,并且没有indexOf()
方法可用,那么这如何帮助(第三种情况)? - U. Windl