[問題] super field access 的 qualifier ?

看板java作者 ( )時間16年前 (2009/05/19 08:06), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
在 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 的? 2. 在 javacc 的 Java1.5.jj 檔裡面,primary expression 是長這樣的: PrimaryExpression ::= PrimaryPrefix ( PrimarySuffix )* 而 prefix 裡面除了上面提到的 case ,也有一個 case 是 Name(), 然後 suffix 裡面也有 .super (lookahead ".super."), 這樣基本上就跟 ClassOrInterfaceType() 裡面完全沒有 TypeArguments() 的 case 長得一模一樣了,那如果上面 1. 的結論是 type argument 沒有意義, 是不是可以說包含 ClassOrInterfaceType() 的這個 case 是多餘的呢? 大家覺得是 eclipse.jdt.core.dom 那邊的作法比較有道理, 還是覺得 eclipse 的 parser 應該也要吃 Type 比較好呢? ---- 請問在哪裡可以找到這種相關的討論? ~"~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 169.232.171.165
文章代碼(AID): #1A4VVmXo (java)
討論串 (同標題文章)
文章代碼(AID): #1A4VVmXo (java)