Java дубликаты методов объединяются - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть метод с именем ReadTill, который имеет одинаковое тело кода, но разные типы параметров. Может ли кто-нибудь показать мне стратегию / код для их объединения. Я не думаю, что InputStream и BufferedReader имеют общий интерфейс, если они это делают, что это такое, а также, если бы они этого не делали, как бы я это сделал?

Я думаю, что вопрос должен быть, как я могу сделать это с генериками?

Заранее спасибо.

public static void ReadTill(InputStream in, OutputStream out, String end) throws IOException {
    int c, pos = 0;
    StringBuffer temp = new StringBuffer();
    while ((c = in.read()) != -1) {
        char cc = (char) c;
        if (end.charAt(pos++) == cc) {
            if (pos >= end.length()) {
                break;
            }
            temp.append(cc);
        } else {
            pos = 0;
            if (temp.length() > 0) {
                out.write(temp.toString().getBytes());
                temp.setLength(0);
            }
            out.write(cc);
        }
    }
}

public static void ReadTill(BufferedReader in, OutputStream out, String end) throws IOException {
    int c, pos = 0;
    StringBuffer temp = new StringBuffer();
    while ((c = in.read()) != -1) {
        char cc = (char) c;
        if (end.charAt(pos++) == cc) {
            if (pos >= end.length()) {
                break;
            }
            temp.append(cc);
        } else {
            pos = 0;
            if (temp.length() > 0) {
                out.write(temp.toString().getBytes());
                temp.setLength(0);
            }
            out.write(cc);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Эти классы (InputStream, BufferedReader) не реализуют одни и те же интерфейсы и не расширяют один и тот же класс, но вы можете создать один из другого:

public static void readTill(InputStream in, OutputStream out, String end) throws IOException {
    readTill(new BufferedReader(new InputStreamReader(in)), out, end);
}

public static void readTill(BufferedReader in, OutputStream out, String end) throws IOException {
    // as before
}

И обычно имена методов Java - camelCase, поэтому я изменил их в примере.

1 голос
/ 01 апреля 2012

С головы до головы, не проверено:

public static void ReadTill(InputStream in, OutputStream out, String end) throws IOException {
 ReadTill(new BufferedReader(new InputStreamReader(in)), out, end);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...