如何用java中的常量重新初始化String []?

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以满足我的需要.有没有更好的方法来避免所有这些复制?如果是,我可以在同一个变量中拥有所有不同的属性.

Jon*_*eet 6

你绝对可以重新初始化一个字符串变量 - 但目前你正在重新声明它.代替:

String[] locationProjection = {
    ...
};
Run Code Online (Sandbox Code Playgroud)

你要:

locationProjection = new String[] { 
    ...
};
Run Code Online (Sandbox Code Playgroud)

不管是不是一个好主意还不完全清楚,请注意 - 您可能希望使用a List<T>并使用每组值创建一个不可修改的列表.对我来说这似乎是个奇怪的模式......你想用它做什么?可能有更好的方法.


jbo*_*man 5

不是在每个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)