Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用静态类优于使用相同名称的变量_Java_Static_Obfuscation - Fatal编程技术网

Java 使用静态类优于使用相同名称的变量

Java 使用静态类优于使用相同名称的变量,java,static,obfuscation,Java,Static,Obfuscation,类B扩展了类A,类A有一个名为K的变量,我还有一个名为“K”的静态类。在类B中是否有一种方法支持使用静态类K而不是继承变量K (我正在使用被混淆的反编译代码,我无法重命名K的任何一个版本)您可能需要使用全名引用类K,即myPackage.K,因为K在默认包中,我认为您唯一的选择将是使用反射引用类K,或者编写一个类来包装K,以便使用不同的名称。或者,如果您正在寻找K的一些静态成员,您也可以使用静态导入来获取它们。这是否有效 class A { int X; } class B exten

类B扩展了类A,类A有一个名为K的变量,我还有一个名为“K”的静态类。在类B中是否有一种方法支持使用静态类K而不是继承变量K


(我正在使用被混淆的反编译代码,我无法重命名K的任何一个版本)

您可能需要使用全名引用类
K
,即
myPackage.K
,因为K在默认包中,我认为您唯一的选择将是使用反射引用类K,或者编写一个类来包装K,以便使用不同的名称。或者,如果您正在寻找K的一些静态成员,您也可以使用静态导入来获取它们。

这是否有效

class A {
    int X;
}

class B extends A {
    static class X {}
    void foo() {
        X = 5;  // A.X variable
        B.X x = new B.X(); // B.X nested class
    }
}

反编译代码,嗯?听起来完全合法(讽刺)你所说的“静态类”是什么意思?它是一个静态嵌套类?为什么不直接从它的合法所有者那里获取源代码呢?如果不是源代码,也可以使用API编写实用程序等。这是完全合法的。为一个支持其modding社区的游戏制作mod。@Zachar哪个游戏?也许你可以把它添加到问题中。StackOverflow上可能有人尝试过修改它。每个类都有一个包。我将把它留给您去弄清楚它是什么。@Kublai每个类都有一个包,但不是每个类都可以被引用来包含它的包名。但这不适用于K,因为它是一个嵌套类。@Hemal-你说得对,我更正了。但它是嵌套类吗?OP从未回答过我的问题。
static
修饰符仅在类嵌套时才适用,对吗?这就是为什么我假设它是一个嵌套类。如果Y不是嵌套的(因此不是静态的),那么就没有问题。@Hermal-我们可以做出这样的假设,尽管OP对此并不完全清楚。我想知道你是否看到了我没有确定的东西。+1我不知道默认包的限制-我想我学到了一些东西。如果A、B、K都是顶级的,在默认包中,那么B中对K的任何引用都将解析为类K,而不是A.K。如果K是B的嵌套类,那么它可以被引用为B.K,见我的答复below@Hemal:这取决于您试图对K执行的操作,但不明确的引用将指向字段,而不是类。例如,
int x=K.y
,其中y是类K的静态字段,将不起作用,因为K将解析为字段,而不是类。然而,在我思考的时候,我在想,如果OP真的有命名问题,那么他/她可能想要的是静态导入。我认为访问静态成员是唯一可能发生冲突的地方。@Ryan,我试过了,正如您指出的那样,(嵌套静态类的)静态成员是唯一存在冲突的地方,但是可以通过使用初始化为null的嵌套类型的伪变量来解决。