作者macbuntu (邀怪)
看板java
标题[问题] 这算是 Java 语法的漏洞吗?
时间Sun Nov 9 22:09:34 2008
做个头脑体操, 看看下面这两个 class:
class Foo {
static String
name;
}
class A {
static Foo
B = new Foo();
static class
B {
static String
name;
}
}
之後在别处写到:
A.B.name = "abc";
这样 compiler 并不会抱怨是 ambiguous, 而是将 A.B.name resolve 成为
A.
B.
name , 顶多只有个 warning 说 static field 'name' 应该
要以 static reference 去操作, 也就是 Foo.name 会比较好.
糟糕的是, 除非靠 reflection, 否则完全没有办法用到 A.
B.
name 耶?
这样状况 compiler 应该当成 ambiguous 比较好吧, 否则这变成是语法的瑕疵,
合乎 Java 语法的程式, 却有东西完全无法存取得到?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.27.29
※ 编辑: macbuntu 来自: 220.135.27.29 (11/09 22:11)
1F:推 godfat:所以 C# 有所限制(听说的) 11/09 22:21
2F:→ godfat:不过我是觉得就不要乱写就好,不是大问题 11/09 22:22
3F:推 AI3767:奇怪, 我试了後, 都没有warning 出现 Orz 11/10 01:28
4F:推 ogamenewbie:我比较好奇是在 class A 里面去撞名的意义是?... 11/10 06:04
5F:推 qrtt1:呵, 实务上虽然不会这样, 但值得注意有这样的现象 11/10 09:23
6F:推 sbrhsieh:请参考 JavaPL spec 2nd 的 6.3.2 一节 11/16 20:57
7F:→ sbrhsieh:6.3.2 Obscured Declaration 11/16 20:59