2015-10-05 5 views
1

Я пытаюсь написать метод, который должен принять объект Writer и использовать его для предоставления вывода в файл. В текущем коде у меня есть NullPointerException, предположительно потому, что либо есть ошибка в том, как я создаю свой BufferedWriter, либо в некоторых случаях w (объект Writer) передается как null. Я не могу контролировать то, что передается как w, и не может изменить исключения, которые этот метод способен выполнить.Java: BufferedWriter NullPointerException

Мой код выглядит следующим образом:

public void write(Writer w, Stat s) throws IOException { 
    try{ 
     BufferedWriter writeFile = new BufferedWriter(w); 
     writeFile.write(s.getData()); 
     writeFile.flush(); 
    } catch (IOException e){ 
     ... 
    } 
} 

Есть ли что-то я делаю не так?

(Это задание возникает из домашних заданий, но этот вопрос не является само по себе домашнее задание)

+0

Что такое 'stat'? – sam

+0

Вы инициализировали переменные 'w' и' stat'? Действительно ли stat.getData() 'фактически возвращает данные? (Я предполагаю '' 'должен был быть' stat', и вы просто набрали его неправильно в вопросе. Это правильно?) – Keith

+0

Есть ли ошибка stacktrace? –

ответ

3

Вы нужны как Writer w и Stat s быть не нулевым. Поэтому вы должны отклонить их, если они являются нулевыми.

public void write(Writer w, Stat s) throws IOException { 
    if (w == null) 
     throw new IllegalArgumentException("writer is null"); 
    if (s == null) 
     throw new IllegalArgumentException("stats is null"); 
    ... 
+0

Вы должны добавить, что хотя объект 'Stat' может быть сконструирован, его' getData() 'также может возвращать« null ». – Keith

+0

это проверка с двумя исключениями, то есть NullPointerException ТАКЖЕ делает эту проверку. Лучше ИМО, если вы собираетесь идти по этому маршруту, нужно поместить try {} catch {} в блоки вокруг строк, где вы могли бы получить nullpointinterexceptions, поймать NPE и выбросить исключение IllegalArgumentException, инициализированное исключением NPE – ControlAltDel

+1

@Keith I don ' Думаю, что это относится к дезинфекции аргументов. 'writeFile.write (s.getData());' не бросает NPE, если 's.getData()' возвращает значение null. – wero