5

我的问题主要是关于 Scala 的,但由于最终它仍然使用具有其特性的 JVM,所以我也放置了java标签。

我使用参数化类型的次数越多,出现上述问题的次数就越多。类型擦除带来了很多不便(模式匹配case x: A[B]变得不可能等等),并且有相当繁重的基于运行时反射的解决方法涉及在运行时携带类型信息的额外对象,所以我(从我的用户的角度来看,只是简单好奇心)想知道是什么决定导致了这片土地目前的谎言。

携带完整类型到运行时信息是否过于复杂?或者也许它没有那么多用例,所以它不只是经常需要?无论如何,类型擦除的优缺点是什么?

编辑:我想有一些关于该主题的合格讨论、论文或帖子等,我希望答案在理论上得到支持或至少包含某种 CS 推测,而不仅仅是“运行时类型是一种不好的做法” . 这不是关于你是否确实遇到过问题的问题——而是关于导致决定的 CS 基础。

4

1 回答 1

4

携带完整类型到运行时信息是否过于复杂?

这样做是为了向后兼容,而不是为了降低复杂性。

或者也许它没有那么多用例,所以它不只是经常需要?

它并不经常需要,但在需要时会令人困惑。

无论如何,类型擦除的优缺点是什么?

鉴于这是自 2004 年以来的情况,我怀疑这真的无关紧要,因为无论利弊如何,它都不会发生显着变化。有一个解决此问题的概念计划,但它的优先级不高,可能不会进入 Java 9。

于 2013-09-08T14:17:16.003 回答