Re: [問題] generic type parameter bound?

看板java作者 (邀怪)時間16年前 (2009/05/05 22:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/8 (看更多)
※ 引述《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)
文章代碼(AID): #1A04pZrb (java)
討論串 (同標題文章)
文章代碼(AID): #1A04pZrb (java)