我对可选的概念很陌生。在下面发布的代码中,我正在检查以下内容:if (operation_1) { if (operation_2) { if (operation_3) { } else { throw_3 } } else { throw_2 }} else { throw_1}但是对于此代码,android studio会为“下面标记为”的第二个orElseThrow()操作生成错误。请让我为什么收到此错误?如何解决?我下面编写的代码是否满足上面显示的条件。码: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 最佳答案 我不建议在此处使用Optional,因为这并不意味着替换简单的“如果”情况。相反,请反转if条件以除去嵌套:if (!operation_1) throw_1;if(!operation_2) throw_2;if(! operation_3) trow_3;......对于您的代码,您不能仅按如下所示链接orElseThrow方法,因为对orElseThrow的第一次调用将返回封装在Optional中的值(如果存在),否则会抛出提供的异常,因此此方法调用的结果不再是。
10-08 17:33