orElseThrow необязательного объекта не может быть решена - PullRequest
0 голосов
/ 14 декабря 2018

Я совершенно новичок в концепции Факультативного.В приведенном ниже коде я проверяю следующее:

if (operation_1) {

    if (operation_2) {

        if (operation_3) {

        } else {
            throw_3
        }
    } else {
        throw_2
    }
} else {
    throw_1
}

, но для этого кода android studio выдает ошибку для второй операции orElseThrow (), "отмеченной ниже".пожалуйста, дайте мне знать, почему я получаю эту ошибку? как ее исправить?соответствует ли приведенный ниже код условиям, указанным выше.

code :

OptionalsUtils.toOptional(Room.databaseBuilder(getApplicationContext(), MovieDatabase.class, ActMain.DATA_BASE_NAME))//operation_1
            .map(x->{
                MovieDatabase movieRoomDb = x.fallbackToDestructiveMigration().build();
                this.setInitializedBuiltMovieRoomDatabase(movieRoomDb);
                return movieRoomDb;
            })//operation_2
            .map(y->{
                SupportSQLiteOpenHelper openHelperInstance = y.getOpenHelper();
                this.setSQLOpenHelperInstance(openHelperInstance);
                return openHelperInstance;
            })//operation_3
            .orElseThrow(()-> new NullPointerException(THROW_SQL_OPEN_HELPER_NULL))//throw_3
            .orElseThrow(()-> new NullPointerException(THROW_ROOM_DATABASE_PERSISTENT_BUILD_NULL))//throw_2<-cases error
            .orElseThrow(()-> new NullPointerException(THROW_ROOM_DATABASE_PERSISTENT_BUILDER_NULL));//throw_1

1 Ответ

0 голосов
/ 14 декабря 2018

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

Вместо этого инвертируйте условия if, чтобы удалить вложение:

if (!operation_1) 
   throw_1;
if(!operation_2)
   throw_2;
if(! operation_3)
   trow_3;

...  
...

Что касается вашего кода, вы не можете просто связать orElseThrow методы, как показано, потому что первый вызов orElseThrow вернет значение, инкапсулированное в Optional, если оно присутствует, иначе вызовет предоставленное исключение, таким образом, результат этого вызова методабольше не является Optional.

...