在这种情况下,我的Switch语句是否应以break或者返回x退出?

时间:2016-10-05 21:17:43

标签: java android

在我的应用程序中,用户可以选择文本并使用图像上显示的选项对其进行样式设置。在查看我的代码时,我想知道我的所有switch语句的语句是break还是return true/false以及它是否有任何影响?我可以通过Log.d();使用break退出切换方法并使用return保留在交换机

中看到

所以在这种情况下,案件中发生的事情是否重要?

enter image description here

Switch案例的方法:

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {


        switch (item.getItemId()) {

            case R.id.textcolor:

                f3 = ColorPickerDialogFrag2.newInstance(3, Color.WHITE);
                f3.setStyle(android.support.v4.app.DialogFragment.STYLE_NORMAL, R.style.AppTheme);
                f3.show(fragmentManager, "d");

                f3.setListener(this);

                break;


            //--------------------BOLD----------------------------
            case R.id.bold:

                styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);

                for (int i = 0; i < styleSpans.length; i++) {
                    if (styleSpans[i].getStyle() == android.graphics.Typeface.BOLD) {
                        str.removeSpan(styleSpans[i]);
                        exists = true;
                    }
                }

                if (!exists) {
                    str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStart, selectionEnd,
                            Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                }

                editText.setSelection(selectionStart, selectionEnd);

                return true;
            //--------------------ITALIC----------------------------
            case R.id.italic:

                styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);

                for (int i = 0; i < styleSpans.length; i++) {
                    if (styleSpans[i].getStyle() == android.graphics.Typeface.ITALIC) {
                        str.removeSpan(styleSpans[i]);
                        exists = true;
                    }
                }

                if (!exists) {
                    str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), selectionStart, selectionEnd,
                            Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                }

                editText.setSelection(selectionStart, selectionEnd);
                Log.d(LOG_TAG, "italic");
                break;
            //--------------------UNDERLINE----------------------------
            case R.id.underline:

                UnderlineSpan[] underSpan = str.getSpans(selectionStart, selectionEnd, UnderlineSpan.class);

                for (int i = 0; i < underSpan.length; i++) {
                    str.removeSpan(underSpan[i]);
                    exists = true;
                }


                if (!exists) {
                    str.setSpan(new UnderlineSpan(), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                }

                editText.setSelection(selectionStart, selectionEnd);
                Log.d(LOG_TAG, "underline");
                return true;

            //--------------------STROKE----------------------------
            case R.id.stroke:
                Log.d(LOG_TAG, "stroke");
                android.text.style.StrikethroughSpan[] strokeSpan = str.getSpans(selectionStart, selectionEnd, android.text.style.StrikethroughSpan.class);

                for (int i = 0; i < strokeSpan.length; i++) {
                    str.removeSpan(strokeSpan[i]);
                    exists = true;
                }

                if (!exists) {
                    str.setSpan(new android.text.style.StrikethroughSpan(), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                }

                editText.setSelection(selectionStart, selectionEnd);

                return false;

            case R.id.increase:
                Log.d(LOG_TAG, "increase");
                str.setSpan(new RelativeSizeSpan(1.1f), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                editText.setSelection(selectionStart, selectionEnd);

                break;

            case R.id.decrease:

                str.setSpan(new RelativeSizeSpan(0.9f), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                editText.setSelection(selectionStart, selectionEnd);

                break;

            case android.R.id.cut:

                CharSequence charSequence = editText.getText().subSequence(selectionStart, selectionEnd);
                ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
                ClipData clip = ClipData.newPlainText("simple text", charSequence);
                clipboard.setPrimaryClip(clip);

                editText.getText().replace(selectionStart, selectionEnd, "");
                Toast.makeText(context, R.string.toastCopy, Toast.LENGTH_SHORT).show();

                break;

            case android.R.id.copy:

                charSequence = editText.getText().subSequence(selectionStart, selectionEnd);
                clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
                clip = ClipData.newPlainText("simple text", charSequence);
                clipboard.setPrimaryClip(clip);
                Toast.makeText(context, R.string.toastCopy, Toast.LENGTH_SHORT).show();

                break;

            case R.id.textfont:

                FontFragment fontFragment = new FontFragment(selectionStart, selectionEnd, editText);
                fontFragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
                fontFragment.show(fragmentManager, "fontfragment");

                break;
        }
    }

    Log.d(LOG_TAG, "out of switch");
    return true;

}

2 个答案:

答案 0 :(得分:5)

  

在交换机中使用return stay

这是不正确的。 return语句肯定会 保留在switch语句中。 return将立即从方法返回。方法中的其余代码将不会被执行。这就是为什么在使用return时没有看到switch语句之后的日志语句。

breakreturn将退出switch语句。任何一个都可以。关于在方法中使用多个return语句存在很多争议。

有些人希望在方法结束时只有一个return语句。这种做法最不令人惊讶:当您维护软件并需要进行更改时,您可以在切换后添加语句并执行它们。您不需要找到每个return并调整每个{。}。

但是,有时会有多个return语句的良好用法。例如,如果您立即测试错误条件并return,则可以缩短代码并避免不必要的深度缩进。有时它需要多余的标志和错综复杂的逻辑来避免额外的返回语句。

最后,考虑将来几个月和几年阅读和理解您的代码的清晰度和易用性。那时差异很重要。以最简单,最清晰的方式编写代码。我建议拆分你的switch语句,并为每个块分别设置方法。然后声明会更短更清晰。您可以在屏幕上看到每个案例而无需滚动并迷失在噪音中,并且能够看到每个breaks。或者使用if-else语句,以便在case失败时因为忘记了break而感到惊讶。

答案 1 :(得分:2)

您可以使用breakreturn退出case块,但return也会立即退出该方法。这就是为什么&#34;出于开关&#34;使用return时不会记录。