java – 当调用静态方法返回相同类型的变量和类型本身的相同名称
发布时间:2020-12-15 08:48:49 所属栏目:Java 来源:网络整理
导读:为什么它会因下面显示的错误而失败?我不确定JLS在哪里寻找限制做这样的事情. public class A { static A foo() { return null; } public static void main(String[] args) { A A = A.foo(); }} 编译时出错 A.java:14: error: variable A might not have bee
为什么它会因下面显示的错误而失败?我不确定JLS在哪里寻找限制做这样的事情.
public class A { static A foo() { return null; } public static void main(String[] args) { A A = A.foo(); } } 编译时出错 A.java:14: error: variable A might not have been initialized A A = A.foo(); ^ 1 error 解决方法
变量隐藏了同名的类.这就是为什么有
naming conventions的部分原因.
正如Patricia在评论中指出的那样,这在JLS中实际上称为obscuring:
在您的情况下,您会收到编译错误,因为变量隐藏了类型,因为在方法调用之前处理了声明.这与执行以下操作相同: public class A { public void foo() { String s = s.substring(0,s.length()); } } 你得到同样的错误: A.java:3: variable s might not have been initialized String s = s.substring(0,s.length()); ^ 1 error 在评论中,你说你找不到JLS说你的建筑是非法的.它本身并不违法,因为模糊的结果是.考虑两个类的情况,你也可以因为模糊而得到不需要的电话,这不是非法的,只是令人困惑: public class A { public void foo() { System.out.println("A.foo()"); } public static void main(String[] args) { A B = new A(); B.foo(); } public static class B { public static void foo() { System.out.println("B.foo()"); } } } 您认为输出是什么? $javac A.java $java A A.foo() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容