使用运行时反射确定不在标准库(Java或Scala)中的基类

问题描述 投票:0回答:1

我正在从Scala类型生成GraphQL定义,但在运行时反射API中找不到任何内容,只能获取“用户定义”的基类,即不属于Scala或Java标准库的基类。

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

我不知道这是否可以用宏,但这不是一个选项。在尝试使用宏之后,它周围有太多的bug,包括它导致编译器崩溃,并且该bug的修复假设是在最新的zinc但是我不能使用它,因为我使用Gradle只能使用由于0.x.x系列中名称空间的变化,1.x锌系列。

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

java scala reflection
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.