考虑以下代码:
1 domesticUsage?.run {
2 items.add(DelimiterListItem())
3 items.add(SpacerListItem(resources.getDimensionPixelSize(R.dimen.vertical_margin)))
4 if (title.isNotEmpty()) {
5 items.add(SubscriptionHeaderViewListItem(title, Gravity.CENTER_HORIZONTAL))
6 }
7
8 usage1?.let { mainUsageDataList.add(it) }
9 usage2?.let { mainUsageDataList.add(it) }
10 if (mainUsageDataList.isNotEmpty()) {
11 items.add(SubscriptionUsageStatListItem(mainUsageDataList))
12 }
13
14 extra?.run {
15 items.add(SideExtraBannerListItem(title, subtitle))
16 }
17
18 } ?: items.add(ErrorReloadListItem(ErrorType.NO_DATA_MOBILE))
我的问题很简单:
如果extra
(第14行)为null,那么我希望这是该代码段中最后执行的行,但是调试时会发生的情况是它会跳回到第1
行,然后跳回到第{ {1}}从而执行18
视图。
这不应该发生,对吧?仅当ErrorReload
行中的ErrorReload
为空时,才应该添加domesticUsage
视图,对吗?
我在这里想念什么?
答案 0 :(得分:0)
我的意图是使用let
和run
作为验证非空操作的一种较短方法,但是看起来像嵌套那些以我做的方式造成的危害更大,那就好了,所以我结束了回到旧的!= null
方式:
domesticUsage?.run {
items.add(DelimiterListItem())
items.add(SpacerListItem(resources.getDimensionPixelSize(R.dimen.vertical_margin)))
if (title.isNotEmpty()) {
items.add(SubscriptionHeaderViewListItem(title, Gravity.CENTER_HORIZONTAL))
}
if (usage1 != null)
mainUsageDataList.add(usage1)
if (usage2 != null)
mainUsageDataList.add(usage2)
if (mainUsageDataList.isNotEmpty()) {
items.add(SubscriptionUsageStatListItem(mainUsageDataList))
}
if (extra != null)
items.add(SideExtraBannerListItem(extra.title, extra.subtitle))
} ?: items.add(ErrorReloadListItem(ErrorType.NO_DATA_MOBILE))
如果有人想评论一种更简短的方法,而不会导致错误视图的意外添加,我将很高兴看到这一点。