使用运行时反射

时间:2017-12-31 13:42:41

标签: java scala reflection

我从Scala类型生成GraphQL定义,但无法在运行时反射API中找到任何内容,只能获得用户定义的基类"即不属于Scala或Java标准库的一部分。

截至目前,我只有一组我知道的弹出窗口,例如AnyObject以及其他8个人。这些只是在列表中,因为它们是我在编写单元测试时出现的。理想情况下,我不想要一个手动清单,看起来很脆弱,因为新类型可能会破坏。

我不知道宏是否可以实现,但这不是一种选择。在尝试使用宏之后,它周围有太多的bug,包括它导致编译器崩溃,并且该bug的修复被认为是最新的zinc但是我不能使用它因为我&#39 ; m使用Gradle,由于0.x.x系列中的命名空间更改,它只能使用1.x锌系列。

所有这一切,是否有人知道是否有一种方法可以确定不属于标准库的类型的基类?

1 个答案:

答案 0 :(得分:1)

我不认为这样的功能存在甚至应该存在。特别是我不认为术语“标准库”在您的问题背景下的确定得很好。我的意思是为什么它应该从标准库中排除类,而不是从你依赖的其他一些流行的库中排除?标准库中也有一些非常复杂的类型(例如java.text.DateFormatorg.w3c.dom.Document)。是的,你现在可能不会暴露它们,但这只是暂时的。

我认为正确的方法是拥有一个明确的所有基类和/或包的白名单,并将其作为API合同的一部分公开,并将其用于过滤。您也可以尝试使用黑名单(例如java.*javax.*scala.*)过滤掉“标准库”,它可能会工作一段时间,但我仍然没有认为这是一个好主意。