开发者

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);  
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜