Как бросить пользовательское исключение с пустым списком вместо нуля? - PullRequest
0 голосов
/ 28 февраля 2020

Я выбрасываю пользовательское исключение внутри Test1 класса и передаю список конструктору:

    public class Test1 {
        public List<Journal> method1(String str) throws SectionNotFoundException {
        List<Journal> list = new ArrayList<>();
        //...
        else if(...) {
            throw new SectionNotFoundException(list);
        }
        //...
    }
}

И он возвращает меня на строку, где я вызываю method1 класса Test1 внутри класса Test2 вроде:

   public class Test2 {
     //...     
     public void method() {
     //...
     Test1 test1 = new Test1();
     try {
         list = test1.method1(text); 
         } catch (SectionNotFoundException e) {
         //...
         }
     }
 }

Внутри моего пользовательского исключения, которое называется SectionNotFoundException Я хочу получить пустой список вместо null:

public class SectionNotFoundException extends Throwable {
    List<Journal> journalList;

    public SectionNotFoundException(List<Journal> journalList) {
        this.journalList = journalList;
        emptyArrayList();
    }

    public ArrayList<Object> emptyArrayList() {
        return new ArrayList<>();
    }
}

Но фактическое проблема в том, как правильно написать его, если возвращаемое значение emptyList никогда не используется.

enter image description here

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Сделайте это следующим образом:

public class SectionNotFoundException extends Throwable {
    List<Journal> journalList;

    public SectionNotFoundException(List<Journal> journalList) {
        if(journalList == null) {
            this.journalList = new ArrayList<>();
        } else {
            this.journalList = journalList;
        }
    }
}

Сокращение (согласно предложению Stultuske):

public class SectionNotFoundException extends Throwable {
    List<Journal> journalList;

    public SectionNotFoundException(List<Journal> journalList) {
         this.journalList = journalList == null ? new ArrayList<>() : journalList; 
    }
}
0 голосов
/ 29 февраля 2020

Чтобы немного поправить себя:

Я выбрасываю первое пользовательское исключение, не передавая ничего конструктору (как я делал раньше), например:

throw new SectionNotFoundException();

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

public class SectionNotFoundException extends Throwable {    
    public ArrayList<...> emptyArrayList() {
        return new ArrayList<>();
    }
}

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

   public class Test2 {
     //...     
     public void method() {
     //...
     Test1 test1 = new Test1();
     try {
         list = test1.method1(text); // generating SectionNotFoundException
         } catch (SectionNotFoundException e) {
         list = e.emptyArrayList(); // assign empty list instead of null by calling emptyArrayList method inside class of custom exception
         }
     }
 }

Ps Я знаю, что это не совсем отвечает на мой вопрос, скорее, то, что я хотел достичь тогда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...