代码之家  ›  专栏  ›  技术社区  ›  zcourts

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

  •  0
  • zcourts  · 技术社区  · 8 年前

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

    到目前为止,我只有一组我知道的弹出窗口,例如。 Any , Object 还有大约8个人。这些只是在列表中,因为它们是我在编写单元测试时出现的。理想情况下,我不想要手动列表,随着新类型的添加,列表看起来很脆弱,可能会中断。

    我不知道这在宏中是否可行,但这不是一个选项。在对宏进行实验之后,它周围有太多的bug,包括导致编译器崩溃的bug,而对该bug的修复应该是最新的 zinc 但我无法使用它,因为我使用的是Gradle,它只能使用 0.x.x 锌系列,因为 1.x 系列

    这么说来,有人知道有没有办法确定一种不是来自标准库的基类?

    1 回复  |  直到 8 年前
        1
  •  1
  •   SergGr    8 年前

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

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

    推荐文章