Android - 如何使用标签语句

Android - How to use labeled statements

我正在做一个项目,我对其他项目的代码进行了逆向工程。但是,代码包含如此多的 goto 语句和一个 label

我尝试根据使用的标签重新排列代码,但没有得到正确的输出。我知道这可能超出了你们的范围,因为你们不知道代码。

我的问题是关于如何使用 Android 中的标记语句,因为我找不到任何具体代码或演示示例。

下面是我正在处理的代码片段。

    public static String computeIMEI()
{
    String s1 = ((TelephonyManager)getInstance().getSystemService("phone")).getDeviceId();
    if (s1 != null) goto _L2; else goto _L1
 _L1:
    String s = "not available";
 _L4:
    Log.d("IMEI", (new StringBuilder()).append("got deviceID='").append(s).append("'").toString());
    return s;
 _L2:
    s = s1;
    if (s1.equals("000000000000000"))
    {
        s = "1971b8df0a9dccfd";
    }
    if (true) goto _L4; else goto _L3
_L3:
}

非常感谢您的帮助,谢谢。

天哪!你在哪里得到它? :)
通常没有人使用 goto 语句。代码很难阅读和理解。

if (s1 != null) goto _L2; else goto _L1 很明显。如果 s1 等于 null,我们转到 _L1 标签,然后从方法转到 _L4 和 return。

如果 s1 不等于 null,我们转到 _L2 标签,然后再次转到 _L4(if (true) goto _L4; else goto _L3,否则永远不会执行分支)和 return 从方法。

您的 "translated" 形式的代码:

public static String computeIMEI() {
    String s1 = ((TelephonyManager)getInstance().getSystemService("phone")).getDeviceId();
    if (s1 != null) {
        s = s1;
        if (s1.equals("000000000000000")) {
            s = "1971b8df0a9dccfd";
        }
    } else {
        String s = "not available";
    }

    Log.d("IMEI", (new StringBuilder()).append("got deviceID='").append(s).append("'").toString());
    return s;
}