indexOf в реализациях CharSequence, которые его поддерживают - PullRequest
3 голосов
/ 07 августа 2011

В моей программе я использую много Strings и StringBuilders. Я хотел бы избавиться от метода toString () StringBuilder и повсеместно использовать CharSequence. Однако мне нужен доступ к методу indexOf (который доступен как в StringBuilder, так и в String, но отсутствует в других реализациях). Как я могу реализовать интерфейс, который сделает эту функцию видимой?

Ответы [ 3 ]

2 голосов
/ 07 августа 2011

Что ж, вы могли бы сделать это достаточно легко, жестко закодировав тесты для известных типов, а в противном случае сделать это "вручную":

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 голос
/ 07 июля 2017

Вы можете использовать метод по умолчанию из TextUtils : indexOf

0 голосов
/ 07 августа 2011

Одна мысль состоит в том, чтобы иметь класс с несколькими статическими реализациями для каждого типа.

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 выбирать, какой метод использовать для вас.

...