赞同在同名变量上的静态类使用

赞同在同名变量上的静态类使用

问题描述:

B类扩展A类,A类有一个名为K的变量,我也有一个名为“K”的静态类。在类B中有没有办法使用静态类K来继承继承变量K?赞同在同名变量上的静态类使用

(我用的是被混淆反编译的代码的工作,我不能重命名或者K的版本)

+1

反编译的代码,呵呵?听起来完全合法(*讽刺*) – tjameson

+0

你是什么意思的“静态类” - 它是一个静态嵌套类? –

+0

为什么不简单地从它的合法所有者那里获取信息?或者,如果不是源代码,那么您可以编写实用程序等。 –

您可能需要引用类K与它的全名,即myPackage.K

+0

若要添加到问题...这些类没有包声明... – Zachar543

+2

每个类都有一个包。我会留给你弄清楚它是什么。 –

+0

@Kublai每个类都有一个包,但并不是每个类都可以引用来包含它的包名。这不适用于K这里,因为它是一个嵌套类。 –

由于K是在默认包中,我认为你唯一的选择是使用反射来引用类K,或者写一个类来包装K,这样你就可以使用不同的名字。或者如果你在K的一些静态成员之后,你也可以使用静态导入来获得它们。

+0

+1我不知道有关默认包的限制 - 猜我学到了一些东西。 –

+0

如果A,B,K都是顶级的并且是默认包,那么在B内部对K的任何引用将解析为K类,而不是A.K.如果K是一个B的嵌套类,那么它可以被引用为B.K,看到我的回复如下 –

+0

@Hemal:这取决于你想要用K做什么,但是模棱两可的引用会去到字段,而不是类。例如。 'int x = K.y',其中y是类K的静态字段,将不起作用,因为K将解析为字段而不是类。然而,当我想到它时,我在想如果OP实际上有一个命名问题,他/她可能想要的是一个静态导入。我认为访问静态会员是唯一会发生潜在冲突的地方。 –

这是行不通的吗?

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 
    } 
}