4

私のプログラムでは、多くの Strings と StringBuilders を使用しています。StringBuilder toString() メソッドを取り除き、全体で CharSequences を使用したいと思います。ただし、indexOf メソッド (StringBuilder と String の両方で使用できますが、他の実装では使用できません) にアクセスする必要があります。この関数を可視化するインターフェイスを実装するにはどうすればよいですか?

4

3 に答える 3

3

まあ、既知の型のテストをハードコーディングし、それ以外の場合は「手動で」実行することで、かなり簡単に実行できます。

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

これは、型をハードコーディングするという点ではかなり醜いですが、うまくいきます。

于 2011-08-07T12:27:50.443 に答える
-1

1 つの考えは、型ごとに複数の静的実装を持つクラスを持つことです。

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 に使用するメソッドを選択させることで、コードをクリーンに保つことができます。

于 2011-08-07T12:59:46.690 に答える