簡體   English   中英

通過運行時反射確定不在標准庫(Java或Scala)中的基類

[英]Determine base classes not in standard lib (Java or Scala) with runtime reflection

我正在從Scala類型生成GraphQL定義,但在運行時反射API中找不到任何內容,只能獲取“用戶定義”的基類,即不屬於Scala或Java標准庫的一部分。

截至目前,我只彈出一組我知道的Object ,例如AnyObject和大約8個其他Object 這些只是在列表中,因為它們是我編寫單元測試時顯示的內容。 理想情況下,我不需要手動列表,由於添加了新類型,它似乎很脆弱,可能會損壞。

我不知道宏是否有可能,但這不是一個選擇。 在嘗試了宏之后,周圍的錯誤太多了,包括導致編譯器崩潰的錯誤,並且該錯誤的修復應該是在最新的zinc但我無法使用它,因為我使用的Gradle只能使用由於1.x系列中的名稱空間更改,導致0.xx鋅系列。

這樣說來,有沒有人知道是否有一種方法可以確定標准庫中沒有的類型的基類?

我認為這樣的功能不存在,甚至不應該存在。 特別是我認為在您的問題中“標准庫”一詞的定義不夠好。 我的意思是為什么它確切地應該從標准庫中排除類,而不從您依賴的其他一些流行庫中排除類? 在標准庫中也有一些非常復雜的類型(例如java.text.DateFormatorg.w3c.dom.Document )。 是的,您可能現在不公開它們,但這僅是目前。

我認為正確的方法是為您要作為API合同的一部分公開的所有基類和/或程序包提供明確的白名單,並將其用於過濾。 您可能還會嘗試使用黑名單(例如java.*javax.*scala.* )來過濾“標准庫”,它可能會工作一段時間,但我仍然認為這不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM