Is it dangerous to re-use an intent variable in the same scope?
I am working with this following switch case to handle different buttons, and launch an activity in each case.
I am wondering-- should I move the Intent object (i) outside-- maybe as a private class attribute and re-u开发者_如何学Pythonse it? Or, should I wrap each case in brackets so I can re-use the name "i" without appending a unique name to it? Which is safer/better? Is there a risk in re-using the same object?
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_numbers:
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_numbers);
startActivity(i);
break;
case R.id.button_colors:
Intent i2 = new Intent(v.getContext(), DrillActivity.class);
i2.putExtra("word_list", R.raw.wl_colors);
startActivity(i2);
break;
case R.id.button_daysmonths:
Intent i3 = new Intent(v.getContext(), DrillActivity.class);
i3.putExtra("word_list", R.raw.wl_daysmonths);
startActivity(i3);
break;
default:
break;
}
}
I would do it this way:
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), DrillActivity.class);
switch (v.getId()){
case R.id.button_numbers:
i.putExtra("word_list", R.raw.wl_numbers);
break;
case R.id.button_colors:
i.putExtra("word_list", R.raw.wl_colors);
break;
case R.id.button_daysmonths:
i.putExtra("word_list", R.raw.wl_daysmonths);
break;
default: return;
}
startActivity(i);
}
I think it is much clearer.
You can reuse the variable. It will be a new reference to a new object.
case R.id.button_numbers:
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_numbers);
startActivity(i);
break;
case R.id.button_colors:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_colors);
startActivity(i);
break;
case R.id.button_daysmonths:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_daysmonths);
startActivity(i);
break;
default:
break;
A tip though, Since all cases are the same as you call the same activity and all you do is put a different value for teh extra, I suggest doing something like:
int wordListValue;
switch ...
case R.id.button_numbers:
wordListValue = R.raw.wl_numbers;
break;
case R.id.button_colors:
wordListValue = R.raw.wl_colors;
break;
case R.id.button_daysmonths:
wordListValue = R.raw.wl_daysmonths;
break;
default:
return;
}
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", wordListValue);
startActivity(i);
精彩评论