Re: [問題] generic type parameter bound?
※ 引述《sbrhsieh (sbr)》之銘言:
: JDT API doc 裡 org.eclipse.jdt.core.dom.TypeParameter - typeBounds method
: 的內容不是寫錯,我的看法是
: 1. JDT 的設計本來就是一個 well-formed source code 就可以 build 出語法樹,
: 儘管裡面有不合格的語法。把一個內容如下的檔案/字串:
: class B<T extends Object[]> {}
: 可以由 org.eclipse.jdt.core.dom.ASTParser build 出完整 ASTNode 的樹狀結構,
: 你可以從其中找出一個 node 是 org.eclipse.jdt.core.dom.TypeParameter object
: 且其 typeBounds method 傳回的 List 有一個唯一的 element 是 org.eclipse.jdt.
: core.dom.ArrayType object。
真的耶, 我剛剛試了 eclipse 一下, 雖然兩種狀況建出來的 AST tree 完全不一樣,
但是都建得出 AST tree.
Foo<? extends Object[]> 的 AST tree 是像這樣:
ParameterizedType
TYPE: SimpleType // Foo
TYPE_ARGUMENTS:
WildCardType
BOUND: { ArrayType } // { Object[] }
UPPER_BOUND: true
而 class Foo<T extends Object[]> {} 的 AST tree 是像這樣:
TypeDeclaration
NAME: SimpleName // Foo
TypeParameter
TYPE_NAME: SimpleName // T
TYPE_BOUNDS: { ArrayType } // { Object[] }
雖然說 java 的 type parameter bounds 不允許 array, 查了 JLS 最後面的
grammar, 發現這個狀況還真的符合 grammar rule, compiler 只能在其他的
semantic checking 階段才會檢查出錯誤. 所以 eclipse 正如你說的
因為是 syntatically sound 所以還是會建出 AST, 這也就是為什麼
TypeParameter.typeBounds() 回傳內容可能會有 array.
Eclipse 還是厲害, documentation 沒錯 :P
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.132.21
※ 編輯: macbuntu 來自: 114.32.132.21 (05/05 22:36)
討論串 (同標題文章)
完整討論串 (本文為第 8 之 8 篇):