Ken*_*Lhv 4 java programming-languages switch-statement
我正在使用一个单独的开关案例,它将使用超过100个案例.有没有限制?
案例的用法是针对我的AutoCompleteTextView,android教程的建议.
以下是我的代码的一部分,忽略Badrul.class,稍后将更改它们.
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Toast;
public class Search extends Activity
{
public void onCreate(Bundle savedInstanceSate)
{
final AutoCompleteTextView autoComplete;
super.onCreate(savedInstanceSate);
setContentView(R.layout.searchshop);
autoComplete = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, shops);
autoComplete.setAdapter(adapter);
autoComplete.setThreshold(1);
autoComplete.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
int index=999;
for(int i=0;i<shops.length;i++)
{
if(autoComplete.getText().toString().trim().equals(shops[i]))
{
index=i;
break;
}
}
switch(index)
{
case 0:
startActivity(new Intent(Search.this, Adidas.class));
break;
case 1:
startActivity(new Intent(Search.this, Affin.class));
break;
case 2:
startActivity(new Intent(Search.this, AlamArt.class));
break;
case 3:
startActivity(new Intent(Search.this, AlAmin.class));
break;
case 4:
startActivity(new Intent(Search.this, Anakku.class));
break;
case 5:
startActivity(new Intent(Search.this, Anggerik.class));
break;
case 6:
startActivity(new Intent(Search.this, Asiari.class));
break;
case 7:
startActivity(new Intent(Search.this, AsterSpring.class));
break;
case 8:
startActivity(new Intent(Search.this, Audrey.class));
break;
case 9:
startActivity(new Intent(Search.this, Badrul.class));
break;
case 10:
startActivity(new Intent(Search.this, Badrul.class));
break;
case 11:
startActivity(new Intent(Search.this, Badrul.class));
break;
default:
Toast.makeText(Search.this, "Invalid Selection", Toast.LENGTH_SHORT).show();
}
}
});
}
static final String[] shops = new String[]
{
"Adidas", "Affin Bank ATM", "Alam Art Gallery", "Al Amin Kids", "Anakku", "Anggerik", "Asiari",
"Aster Spring", "Audrey", "Badrul Songket", "Bata"};
}
Run Code Online (Sandbox Code Playgroud)
在达到Java强加的任何限制之前,代码将变得难以管理.
您是否考虑过重构代码?根据switch语句的设计目标,您可以:
因此,在您的情况下,最好将Map索引值的静态定义为Classes:
public class MyClass
{
private static final Map<Integer, Class> LOOKUP =
new HashMap<Integer, Class>(...);
static
{
LOOKUP.put(0, Adidas.class);
LOOKUP.put(1, Affin.class);
...
}
public void onItemClick(...)
{
...
// Replace switch statement with:
if (LOOKUP.containsKey(index))
{
startActivity(new Intent(Search.this, LOOKUP.get(index)));
}
else
{
Toast.makeText(Search.this,
"Invalid Selection",
Toast.LENGTH_SHORT).show();
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
这使代码onItemClick()更容易阅读.您可以更进一步,定义一个私有startActivity()方法,该方法使用索引并包含所有switch语句替换代码.