我只是意识到以下内容无法编译:
class MyCoolClass {
static void do(){..}
void do(){..}
}
不允许这样做有充分的理由吗?也许它会导致我目前缺少的一些问题?
我目前看到的唯一问题是有人可能会尝试调用静态方法并实际调用非静态方法。但这听起来与相互隐藏的子类上的静态方法相当,所以我不会认为这是一个“好”的理由。
如果将对象视为在该方法的第 0 个参数上调用方法,则它甚至是该方法的非常正常的重载。
如果您想知道:我想要这个,因为它允许为new MyCoolClass().do()
asMyCoolClass.do()
或静态导入创建快捷方式,甚至 as do()
。
这是因为 Java 编译器使用方法的名称和参数类型的有序列表来唯一标识类中的方法。static 是一个修饰符标志,不被视为唯一标识的一部分。唯一标识在运行时也很重要,因为类文件只包含标识方法所需的那些键。方法所在的类名,然后是方法名,然后是参数列表。
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html#jvms-5.4.3.3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句