以不同方式编写开关

时间:2014-11-24 15:09:06

标签: java android performance google-maps optimization

所以我有两个案例的开关,里面的内容就像90%相似,所以我的问题是,如何以不同的方式编写并保存一些代码,我几乎坚持这个,交换机工作,但我是确定还有另一种方式,更优化。

我会深入解释。

我有以下两种情况的开关案例。

switch (tipretea) {
    case "red":

        break;

    case "green":

        break;
}

tipretea是本地数据库中的列,“red”,“green”是该列的值。 在案例中,我正在调用一种方法,将标记放在地图上,红色标记用于“红色”案例,绿色标记用于“绿色”案例。

方法如下所示:

markeradd(id, bmp, pozastring, adresa, denumire, tipretea, latitude + "", longitude + "", latlng, BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));

仅更改了最后一个参数。

BitmapDescriptorFactory.HUE_GREEN)

表示绿色。

BitmapDescriptorFactory.HUE_RED)

表示红色。

如果你问我我的代码是相当大的,所以我要求你写一个更好的方法,下面是完整的开关代码。

switch (tipretea) {
case "red":
    markeradd(id, bmp, pozastring, adresa, denumire, tipretea, latitude + "", longitude + "", latlng, BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
    break;
case "green":
    markeradd(id, bmp, pozastring, adresa, denumire, tipretea, latitude + "", longitude + "", latlng, BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
    break;
}

1 个答案:

答案 0 :(得分:3)

您可以使用float value,在switch中更改该值,然后在float中使用markeradd

float hue = 0;
switch (tipretea) {
    case "red":
        hue = BitmapDescriptorFactory.HUE_RED;
        break;
    case "green":
        hue = BitmapDescriptorFactory.HUE_GREEN;
        break;
}
markeradd(
    id,
    bmp,
    pozastring,
    adresa,
    denumire,
    tipretea,
    latitude + "",
    longitude + "",
    latlng,
    BitmapDescriptorFactory
    .defaultMarker(hue));

优良作法是在default语句中包含switch,以便switch处的值出乎意料地不是提供的案例:

switch (tipretea) {
    case "red":
        hue = BitmapDescriptorFactory.HUE_RED;
        break;
    case "green":
        hue = BitmapDescriptorFactory.HUE_GREEN;
        break;
    default:
        //TODO Do something to catch the possibility of an unexpected value for tipretea (notify the user / send an error report, something like that).
}

另请注意,在最后一种情况下不需要break;语句,因为无论如何都会完成switch。虽然something is to be said for always providing the break; statement

相关问题