【问题标题】:Determine base classes not in standard lib (Java or Scala) with runtime reflection使用运行时反射确定不在标准库(Java 或 Scala)中的基类
【发布时间】:2017-12-31 13:42:40
【问题描述】:

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

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

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

说了这么多,有没有人知道是否有一种方法可以确定不是来自标准库的类型的基类?

【问题讨论】:

    标签: java scala reflection


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2017-01-26
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多