gpt4 book ai didi

java - 这段代码如何使用保留关键字作为字段名称?

转载 作者:行者123 更新时间:2023-12-03 01:43:03 25 4
gpt4 key购买 nike

在尝试解决服务器应用程序启动问题时,我在旧版 Java 字节码中发现了以下构造。 我的 IDE 反编译了一些第三方库,我很好奇这如何有效 - 以前从未见过关键字可以用作字节码中的字段名称

Bytecode version is 48.0 (Java 1.4).

public final class f implements UserContext{

private final String try;
private final UserInfo do;

// a lot of code here

public UserInfo getUserInfo(){
return this.do;
}

public String getViewName(){
return this.try;
}

}

Seems like the library was compiled using some obfuscation features, but how can it be on JVM level? Is it permissible without special flags on JVM startup?

UPDATE:UserInfo 字段的正确 getter 名称是 getUserInfo - 很抱歉让每个人都对具有不同返回值的方法的模糊命名感到困惑,这是一个复制粘贴问题,因为代码位于远程计算机上,无法直接访问该站点。

最佳答案

Java 虚拟机规范(负责定义字节码的外观)放置 no constraints related to keywords on the names of things .

这些限制仅存在on the Java Language level 。您使用的字节码不会反编译为有效的 Java,因为它使用的名称在 Java 语言中无效,但对 JVM 有效。

类似的逻辑适用于仅返回类型不同的两个 getViewName 方法:JVM 规范在字节码中允许这样做(并且工作得很好),但 Java 语言规范禁止这样做。

像这样的字节码最常见的原因是 Java 代码被编译为字节码,然后 obfuscated .

另一个可能的原因是,该代码最初并不是通过编译Java代码产生的,而是另一种针对JVM的语言。在这种情况下,这种情况不太可能发生,因为当变量应该保存 View 名称时,没有人会命名它为 do

关于java - 这段代码如何使用保留关键字作为字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com