indexOf在支持它的CharSequence实现上

时间:2011-08-07 12:24:08

标签: java oop indexof

在我的程序中,我使用了很多字符串和StringBuilders。我想摆脱StringBuilder toString()方法并始终使用CharSequences。但是我需要访问indexOf方法(在StringBuilder和String中都可用,但在其他实现中不可用)。我如何实现一个可以使这个功能可见的界面?

3 个答案:

答案 0 :(得分:2)

嗯,你可以通过对已知类型的硬编码测试来合理地做到这一点,并且可以“手动”进行,否则:

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);
}

在硬编码类型方面这非常难看,但它会起作用。

答案 1 :(得分:1)

您可以使用TextUtils中的默认方法:indexOf

答案 2 :(得分:0)

一种想法是让每个类型都有一个具有多个静态实现的类。

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选择使用哪种方法来保持代码清洁。