作者sbrhsieh (sbr)
看板java
标题Re: [问题] super field access 的 qualifier ?
时间Tue May 19 18:13:28 2009
※ 引述《Senkousha ( )》之铭言:
: 在 JLS 15.11.2:
: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.11.2
: 里面有提到如 T.super.name 这样的 expression,
: 在 eclipse.jdt.core.dom 里面是当作 SuperFieldAccess 像这样来处理:
: SuperFieldAccess:
: [ ClassName . ] super . Identifier
: 而 ClassName 是一个 Name,不是 Type。
: 我的问题是,手边有一份 javacc 4.2 里的(2006?)范例文法 Java1.5.jj,
: 里面在 parse primary expression 的 prefix 时,出现了这样的 case:
: ClassOrInterfaceType() "." "super" "." <IDENTIFIER>
: 其中的 ClassOrInterfaceType() 是个可以包含 type argument 的 Type:
: <IDENTIFIER> [ TypeArguments() ] ( "." <IDENTIFIER> [ TypeArguments() ] )*
: 建出的 parser 也的确接受了 B<int>.super.field 这样的语法,
: 这让我有点想不通的地方是以下两点:
: 1. 就算 class B 是一个 parameterized type ,B<TypeArg> 跟 B 有可能
: 对 super field access 造成影响吗?毕竟可以存取的 super field
: 好像都是 static 的?
为什麽可以存取的 field 只能是 static?!
super.field 与 this.field 都是 access instance field 的语意,而
ClassName.this.field 与
ClassName.super.field 中的
ClassName 是用来
修饰(qualify) this/super(这在 non-static nested class 里用的到,用来明确
指出 this/super 指的是 nested class 或是 enclosing class)。
: 大家觉得是 eclipse.jdt.core.dom 那边的作法比较有道理,
: 还是觉得 eclipse 的 parser 应该也要吃 Type 比较好呢?
应该是不能够有 ClassName<Type>.super.field 这样子的写法,因为这会隐含
误导的语意在里头(类似在 GenericType 的 static field 型态宣告使用 Type-
Parameter)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.138.166