java.lang.StackOverflowError для BufferedReader с пользовательским классом - PullRequest
0 голосов
/ 05 июля 2018

Это пользовательский класс, который я сделал:

class BufferedReader{
    BufferedReader inClient = null;

    public BufferedReader(InputStreamReader stream) {
        inClient = new BufferedReader(stream); //points the stackoverflow on this line
    }
    public String readLine(){
        return inClient.readLine();
    }
}

Итак, когда я пытаюсь получить к нему доступ, как показано ниже, я получаю переполнение стека:

BufferedReader[] inClient = new BufferedReader[2];

//using a socket here
inClient[0] = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

Есть идеи, почему это происходит?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

В вашем конструкторе вы перераспределяете новый экземпляр вашего класса, который перераспределяет новый экземпляр вашего класса ... бесконечно, пока вы не достигнете максимального размера стека, который генерирует StackOverflowError.

Вы должны переименовать свой класс, чтобы его не путали с классом из Java или если вы хотите сохранить имя, вы должны использовать полное имя класса JDK в своем конструкторе и в определении атрибута: java.io.BufferedReader

0 голосов
/ 05 июля 2018

Это дает вам StackOverflowError, потому что у вас есть неконтролируемая рекурсия из-за именования, которое вы используете. Конструктор будет продолжать вызывать себя до тех пор, пока стек не переполнится.

...