java中的问号与冒号(?:)表达式——简化代码

这个表达式很好,emojiFragment = (emojiFragment == null ? new EmojiFragment() : emojiFragment);如果对了,就赋前者给引用,如果错了,就赋后者给引用。所以,我们通常可以用这个表达式来减少代码量。(而且源代码中也是经常这么做的)


接下来简化一下(别管是代码干什么的,简化就是了)

if (moreMsgTypeFragment == null) {
    moreMsgTypeFragment = new MoreMsgTypeFragment();
}

if (!moreMsgTypeFragment.isAdded()) {
    transaction.add(R.id.fl_emoji_fragment_container, moreMsgTypeFragment);
}

if (emojiFragment != null && emojiFragment.isAdded() && !emojiFragment.isHidden()) {
    transaction.hide(emojiFragment);
}

if (mFlEmojiFragmentContainer.getVisibility() == View.VISIBLE && moreMsgTypeFragment.isAdded() && !moreMsgTypeFragment.isHidden()) {
    mFlEmojiFragmentContainer.setVisibility(View.GONE);
} else {
    mFlEmojiFragmentContainer.setVisibility(View.VISIBLE);
}

if (moreMsgTypeFragment.isHidden()) {
    transaction.show(moreMsgTypeFragment);
}

简化后是这样的:

moreMsgTypeFragment = moreMsgTypeFragment == null ? new MoreMsgTypeFragment() : moreMsgTypeFragment;
transaction = !moreMsgTypeFragment.isAdded() ? transaction.add(R.id.fl_emoji_fragment_container, moreMsgTypeFragment) : transaction;
transaction = emojiFragment != null && emojiFragment.isAdded() && !emojiFragment.isHidden() ? transaction.hide(emojiFragment) : transaction;
mFlEmojiFragmentContainer.setVisibility(mFlEmojiFragmentContainer.getVisibility() == View.VISIBLE && moreMsgTypeFragment.isAdded() && !moreMsgTypeFragment.isHidden() ? View.GONE : View.VISIBLE);
transaction = moreMsgTypeFragment.isHidden() ? transaction.show(moreMsgTypeFragment) : transaction;

看着挺舒服的,就是感觉性能上可能有点??把引用赋给他自身,就感觉有点奇怪。还有如果是空返回值的话,又该怎么处理。望指教。


版权声明:本文为qq_36523667原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。