【问题标题】:Which JVM language doesn't have type erasure? [closed]哪种 JVM 语言没有类型擦除? [关闭]
【发布时间】:2016-05-27 22:22:50
【问题描述】:

我正在寻找一种基于 JVM 的语言,它始终在运行时“记住”类型,除非:

  1. 编译器发现擦除不会中断执行或与工作流无关
  2. 用户手动声明要删除的类型。

到目前为止,我只尝试了 scala,它只会在源代码中声明时禁用类型擦除,这不是我想要的,因为它需要大量样板代码来实现,并且当前的实现仍然有很多问题(例如在 Scala 中,类型标签是严格不变的,禁止在协变或逆变情况下使用)。

这种语言存在吗?

【问题讨论】:

  • 我认为还没有。保存泛型的自然方法是将它们存储在注释中,但是有很多东西不能被注释(或者至少在 Java 8 之前不能),所以直到最近,这还行不通.请注意,大多数类型 在运行时保留。否则动态方法分派将不起作用。实际上,没有保留的是类型构造函数的类型参数。有些人可能会争辩说应该是这样。例如。 Haskell 编译器通常会删除 所有 类型(不仅仅是泛型),而且 Haskell 并不完全知道打字松散。
  • Kotlin 在内联函数中具体化了泛型。所以仅在某些有限的情况下。

标签: java scala clojure jvm


【解决方案1】:

锡兰有fully reified generics。我自己没试过,不知道实际效果如何。

【讨论】:

  • 非常感谢!希望我能学得快
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 2010-09-09
  • 2011-03-05
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多