[英]Is it a java best practice?
我正在阅读XposedBridge的源代码。
我在阅读以下代码时感到困惑
do {
label65: {
try {
((XC_MethodHook)callbacksSnapshot[beforeIdx]).beforeHookedMethod(param);
} catch (Throwable var18) {
log(var18);
param.setResult((Object)null);
param.returnEarly = false;
break label65;
}
if(param.returnEarly) {
++beforeIdx;
break;
}
}
} while(beforeIdx < callbacksLength);
据我所知,code break label65
表示会跳出while
区域,但是和label165
区域是一样的。 标签lable165
的作用是什么? 这是我不知道的关于 Java 的最佳实践。
这不被认为是好的做法。
看来,这段代码被反编译器产生的,我怀疑是标签和break
实际上是一个continue
声明,这是完全正常的,如果你需要提前退出循环并回到起点。
它在 Java 中被认为是不好的做法,并且通常被认为类似于以创建意大利面条式代码而臭名昭著的 GOTO 语句。
如果您需要在 Java 中使用带标签的 break 语句,通常意味着有更好的方法来构建逻辑/循环来避免它们。 我个人觉得它们令人困惑,尤其是当它们被滥用时。
但是,它们与 GOTO 语句的不同之处在于您只能跳转到特定位置。 它们对于在特定条件下完全跳出嵌套循环非常有用。
它就像 GOTO 语句并起到递归调用的作用。 不过,这不是一个很好的做法。
据我所知,code break label65 表示会跳出while区域,但是和label165区域是一样的。
实际上,它会中断到标记语句的末尾。 如果您仔细查看括号,这意味着它在紧接在
++beforeIdx;
在循环结束时。
标签label165的作用是什么?
看上面。
这是我不知道的关于 Java 的最佳实践。
这不是最佳实践。 此处使用标签的方式使代码难以理解,这是不好的做法。
事实上,如果这是手写代码,那么我怀疑它并没有像作者认为的那样做。 如果您查看带有returnEarly
标志的内容,它会在异常处理程序中设置,然后在try ... catch
之后的语句中进行测试。 但是处理程序也会中断到跳过if
语句的标签!
这可能是故意的,但如果是这样,那么它是一种非常晦涩/混淆的逻辑编码方式。
@cryslis 写道:
注意我的回答。 我认为这是一个反编译的继续。
我也怀疑是反编译的代码。 奇怪的本地名称( label65
和var18
)是另一个线索。
但是,您说您在 Github 存储库中找到了源代码。 这两件事并不相互排斥……但如果有人反编译代码并将其上传到 Github,那是非常不可靠的,而且可能是非法的。 我不想在没有明确证据的情况下指指点点。 而且我在 repo 中找不到带有label65
和var18
的源代码。
当然,反编译代码并将其上传到 Github 并不是“最佳实践”。
如果您正在获取字节码并试图通过反编译来理解它们,那么这也不是“最佳实践”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.