【问题标题】:Writing a switch differently以不同的方式编写开关
【发布时间】:2014-11-24 15:09:06
【问题描述】:

所以我有一个带有两种情况的开关,里面的东西 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;
}

【问题讨论】:

  • 将案例结果存储在本地值中,例如 myHue= BitmapDescriptorFactory.HUE_RED;和 myHue=BitmapDescriptorFactory.HUE_GREEN;然后只需使用该结果调用您的 markeradd 方法

标签: java android performance google-maps optimization


【解决方案1】:

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

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

switched 的值与提供的情况不同时,最好在switch 语句中包含default

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.

【讨论】:

  • 它不等价,因为原版对不匹配的输入没有任何作用(通常没什么大不了的)。
  • @maaartinus 你是对的,但就像你说的,在这种情况下,我认为这就是提问者想知道的。
  • 是的,这正是我想要的,谢谢@MarchingHome。
猜你喜欢
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多