Groovy中的泛型

Dón*_*nal 6 java generics groovy

以下Groovy代码打印"它的工作原理"

def printIt(Class<? extends Exception> clazz) {
  println "it works"
}

printIt(String.class)
Run Code Online (Sandbox Code Playgroud)

即使参数不满足约束 Class<? extends Exception>

我的理解是,这是因为:

  1. Java泛型中的类型擦除意味着没有运行时泛型类型检查
  2. 在Groovy中没有编译时类型检查

这两点意味着在Groovy中实际上没有检查有界泛型类型.有没有什么办法可以检查(在运行时)Class传递的对象是否printIt满足约束? extends Exception

谢谢,唐

bru*_*nde 4

查看此链接

[...]在某些方面,这与动态语言的重点不一致,动态语言通常在运行时才能确定对象的类型。但 Groovy 的目标是尽可能适应 Java 的静态类型,因此 Groovy 1.5 现在也支持泛型。话虽如此,Groovy 的泛型支持并不是要完全克隆 Java 的泛型。相反,Groovy 的目标是在源代码级别允许泛型(以帮助从 Java 剪切和粘贴),并且在有意义的地方允许 Groovy 和使用泛型的 Java 工具和 API 之间进行良好的集成。[...]

总之,我认为不可能在运行时获取该信息。