Kotlin Java 代碼對照

Java

public final void onCheckedChanged(RadioGroup radioGroup, int i) {
	Intrinsics.checkExpressionValueIsNotNull(radioGroup, "group");
	View findViewById = radioGroup.findViewById(i);
	if (findViewById != null) {
	    int indexOfChild = radioGroup.indexOfChild((RadioButton) findViewById);
	    FragmentTransaction beginTransaction = getSupportFragmentManager().beginTransaction();
	    Intrinsics.checkExpressionValueIsNotNull(beginTransaction, "supportFragmentManager.beginTransaction()");
	    String str = getClass().getSimpleName() + '_' + indexOfChild;
	    Fragment findFragmentByTag = getSupportFragmentManager().findFragmentByTag(str);
	    if (findFragmentByTag == null) {
	        findFragmentByTag = SubjectDetailFragment.Companion.newInstance();
	        beginTransaction.add(R.id.subjectsContainer, findFragmentByTag, str);
	    }
	    FragmentManager supportFragmentManager = getSupportFragmentManager();
	    Intrinsics.checkExpressionValueIsNotNull(supportFragmentManager, "supportFragmentManager");
	    List<Fragment> fragments = supportFragmentManager.getFragments();
	    Intrinsics.checkExpressionValueIsNotNull(fragments, "supportFragmentManager.fragments");
	    for (Fragment fragment : fragments) {
	        Intrinsics.checkExpressionValueIsNotNull(fragment, "it");
	        if (Intrinsics.areEqual((Object) str, (Object) fragment.getTag())) {
	            beginTransaction.show(findFragmentByTag);
	        } else {
	            beginTransaction.hide(findFragmentByTag);
	        }
	    }
	    beginTransaction.commitAllowingStateLoss();
	    return;
	} 
	 throw new TypeCastException("null cannot be cast to non-null type android.widget.RadioButton");
}

Kotlin


binding.subjects.setOnCheckedChangeListener { radioGroup, checkedId ->
    val indexOfChild =
        radioGroup.indexOfChild(radioGroup.findViewById(checkedId) as RadioButton)
    val beginTransaction = supportFragmentManager.beginTransaction()
    val tag = this@SubjectsActivity.javaClass.simpleName + '_' + indexOfChild
    var findFragmentByTag = supportFragmentManager.findFragmentByTag(tag)
    if (findFragmentByTag == null) {
        findFragmentByTag = SubjectDetailFragment.newInstance()
        beginTransaction.add(R.id.subjectsContainer, findFragmentByTag, tag)
    }
    val fragments = supportFragmentManager.fragments
    for (fragment in fragments) {
        if (tag == fragment.tag) beginTransaction.show(findFragmentByTag)
        else beginTransaction.hide(findFragmentByTag)
    }
    beginTransaction.commitAllowingStateLoss()
}

可以發現Kotlin做了大量的非空判斷,無疑在精簡代碼的同時保證了程序的健壯性

Intrinsics.checkExpressionValueIsNotNull

當然這在反編譯閱讀源碼是也降低了程序的可讀性,對於Java初學者略增加了學習成本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章