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

标签 java scala reflection

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

到目前为止,我只弹出了一组我知道的内容,例如AnyObject 以及其他大约 8 个。这些仅出现在列表中,因为它们是我编写单元测试时出现的内容。理想情况下,我不需要手动列表,随着添加新类型,它似乎很脆弱,它可能会破坏。

我不知道这是否可以通过宏实现,但这不是一个选择。在尝试宏之后,发现它周围有太多错误,包括它导致编译器崩溃,并且该错误的修复应该在最新的 zinc 中,但我无法使用它,因为我' m 使用 Gradle,由于 1.x 系列中的命名空间更改,只能使用 0.x.x Zinc 系列。

话虽如此,有谁知道是否有一种方法可以确定不来自标准库的类型的基类?

最佳答案

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

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

关于java - 使用运行时反射确定不在标准库(Java 或 Scala)中的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48042963/

相关文章:

java - 使用位操作运算符进行位格式转换

java - 将用户输入与 mysql 数据库值进行比较

scala - VS 的子集包含

java - 如何检查 scala 类是否可以从 java 类分配

java - android中的无处不在的ClassCastException

java - 自定义 FTP 应用程序 : representing status and error codes

java - 在 Android 垃圾邮件上旋转屏幕保存的实例状态和 ActivityResultRegistry

scala - 参数类型为 "T=",什么意思

scala - 你能为抽象类型指定一个 View 吗?

java - 在 Java 中,是否有更好的方法来替代 getter 和 setter 方法?