Как временно инициализировать объект, чтобы избежать исключения NullPointerException в java? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть класс Post, который будет содержать несколько сообщений на странице!

public static class Post {
        String cation;
        int id;
        PageInfo[] usersLiked;
        boolean isValid = false;

        Post (String caption, int id, PageInfo[] usersLiked) {
            this.cation = caption;
            this.id = id;
            this.usersLiked = usersLiked;
        }
    }

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

Например, у меня есть 2 сообщения, но мой массив сообщений имеет размер 5.

Post[] postArray = new Post[5];

Я указываю используемые сообщения с "isValid".

Тогда как Могу ли я не получить исключение NullPointerException при подсчете действительного размера сообщений?

public int getPostLength () {
            int cnt = 0;
            for (int i = 0; i < 5; i++) {           // 5 : arraysize
                if (postArray[i].isValid == true)
                    cnt++;
            }
            return cnt;
        }

Ответы [ 3 ]

3 голосов
/ 15 апреля 2020
    public int getPostLength () {
        int cnt = 0;
        for (int i = 0; i < postArray.length; i++) {
            if (postArray[i] != null && postArray[i].isValid)
                cnt++;
        }
        return cnt;
    }
2 голосов
/ 15 апреля 2020

Вы можете сделать это через java потоков:

long cnt= Arrays.stream(postArray).filter(Objects::nonNull).filter(Post::isValid).count()

0 голосов
/ 15 апреля 2020

Если postArray имеет только два элемента post, то оператор if вызовет исключение нулевого указателя. Вы не можете вызвать метод или получить доступ к свойству нулевого объекта.

Обернуть существующий оператор if нулевой проверкой.

public int getPostLength () {
            int cnt = 0;
            for (int i = 0; i < 5; i++) { 
                if (postArray[I] != null) {
                    if (postArray[i].isValid == true)
                        cnt++;
                }          
            }
            return cnt;
        }
...