Joa*_*ins -1 java string switch-statement
我在java中有switch case几个ints,并且在每个case我想要重新String[]设置方法开头的i设置,所以我不必创建几个String[]变量.
这是一个例子:
switch (datacontentprovider.sUriMatcher.match(uri)) {
case datacontentprovider.LOCATION:
String[] locationProjection = {
datacontentprovider.DatabaseHelper.COLUMN_LATITUDE,
datacontentprovider.DatabaseHelper.COLUMN_LONGITUDE,
datacontentprovider.DatabaseHelper.COLUMN_TIME,
datacontentprovider.DatabaseHelper.COLUMN_ACCURACY,
datacontentprovider.DatabaseHelper.COLUMN_PROVIDER };
break;
case datacontentprovider.PICTURE:
String[] pictureProjection = {
datacontentprovider.DatabaseHelper.COLUMN_PIC_LATITUDE,
datacontentprovider.DatabaseHelper.COLUMN_PIC_LONGITUDE,
datacontentprovider.DatabaseHelper.COLUMN_PIC_TIME,
datacontentprovider.DatabaseHelper.COLUMN_PIC_ACCURACY,
datacontentprovider.DatabaseHelper.COLUMN_PIC_URL };
break;
case datacontentprovider.ACCELEROMETER:
String[] accelerometerProjection = {
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_X,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_Y,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_Z,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_TIME, };
break;
case datacontentprovider.SOUND:
String[] amplitudeProjection = {
datacontentprovider.DatabaseHelper.COLUMN_AMPLITUDE_AMPLITUDE,
datacontentprovider.DatabaseHelper.COLUMN_AMPLITUDE_TIME };
break;
case datacontentprovider.BATTERY:
String[] batteryProjection = {
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_STATUS,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_ISCHARGING,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_CHARGEPLUG,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_USBCHARGE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_ACCHARGE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_LEVEL,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_SCALE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_BATTERYPCT,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_TIME};
break;
case datacontentprovider.ORIENTATION:
String[] orientationProjection = {
datacontentprovider.DatabaseHelper.COLUMN_ORIENTATION_AZIMUT,
datacontentprovider.DatabaseHelper.COLUMN_ORIENTATION_TIME };
break;
case datacontentprovider.LIGHT:
String[] lightProjection = {
datacontentprovider.DatabaseHelper.COLUMN_LIGHT_LUMINOSITY,
datacontentprovider.DatabaseHelper.COLUMN_LIGHT_TIME };
break;
default:
throw new SQLException("Failed to get table data " + uri);
}
Run Code Online (Sandbox Code Playgroud)
但至少在java中,我无法创建String[]变量,而是在每个内部重新初始化它case以满足我的需要.有没有更好的方法来避免所有这些复制?如果是,我可以在同一个变量中拥有所有不同的属性.
你绝对可以重新初始化一个字符串变量 - 但目前你正在重新声明它.代替:
String[] locationProjection = {
...
};
Run Code Online (Sandbox Code Playgroud)
你要:
locationProjection = new String[] {
...
};
Run Code Online (Sandbox Code Playgroud)
不管是不是一个好主意还不完全清楚,请注意 - 您可能希望使用a List<T>并使用每组值创建一个不可修改的列表.对我来说这似乎是个奇怪的模式......你想用它做什么?可能有更好的方法.
不是在每个case语句中声明一个新变量,而是在开关上方声明变量,然后对于每种情况,您可以初始化数组:
String[] locationProjection;
switch (datacontentprovider.sUriMatcher.match(uri)) {
case datacontentprovider.LOCATION:
locationProjection = new String[] {
datacontentprovider.DatabaseHelper.COLUMN_LATITUDE,
datacontentprovider.DatabaseHelper.COLUMN_LONGITUDE,
datacontentprovider.DatabaseHelper.COLUMN_TIME,
datacontentprovider.DatabaseHelper.COLUMN_ACCURACY,
datacontentprovider.DatabaseHelper.COLUMN_PROVIDER };
break;
//...
}
Run Code Online (Sandbox Code Playgroud)