问题标签 [erasure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
474 浏览

java - 相同的擦除但不同的类型。

怎么会是ArrayList<Class<?>>一样的擦除ArrayList<Object>却不能投到它的情况呢?

我的代码目前正在两个 Eclipse 错误之间切换。

这表明:

但是,如果我删除演员表并创建一个构造函数:
GenericExclusiveSelectionPanel(String, ArrayList<Class<Transportable>>)

我得到 eclipse 错误:

然后它将构造函数(如下)突出显示为冲突的构造函数。

0 投票
1 回答
132 浏览

java - 如果被覆盖的方法没有,为什么覆盖方法不能指定类型参数?

但是,如果我将 f(object) 更改为 f(String) 或 f(Integer),则以下代码无法编译。我已经阅读了有关该主题的其他帖子,但我仍然不明白,编译器为什么不知道使用哪种方法(如果是新实例 A a = new B();)

如果我改成T xObject t仍然无法编译,那有什么区别?此外,为什么它不只是覆盖 A 中的函数?(类型擦除后两者具有相同的签名

0 投票
1 回答
199 浏览

java - 为什么使用原始类型变量会影响签名而不参考类型参数?

查看另一个问题,我遇到了 1.8.0_112 Sun-Oracle 编译器的这种有趣行为(我没有与其他人一起测试过):

编译器在最后一个 for 循环中失败:

因此,尽管intList()返回列表类型不依赖于类型参数List<Integer>,但似乎在编译时被删除了。AlphaT<Integer>

Beta请注意,如果我们声明一个在理论上相当于引用 raw的非泛型接口,Alpha则没有问题。

这是预期的行为吗?有人可以指出语言规范中涵盖这一点的段落吗?如果这至少不是一个错误,那么它似乎相当反直觉和非生产性;也许是为了向后可比性而完成的?

0 投票
1 回答
278 浏览

java - Java 泛型:如果类型在编译时没有被擦除的例子

在 Java 中,泛型类型在编译时被删除,而是Object替换所有泛型参数并完成隐式转换。这样做的原因是为了保持向后兼容性,如此所述。任何人都可以在 Java 1.5 之前的版本中给出一个代码示例,如果 Java 1.5 没有在编译时擦除类型,那么它会在运行时导致问题吗?

0 投票
2 回答
121 浏览

scala - 在运行时检查 scala 类型和类型擦除

所以说我们有几个这样的类:

这有效

然而,代码有很多重复。由于唯一不同的是他们击败的类型,我们可以尝试将其排除在外

但随后编译器开始抱怨

果然,它不起作用。winsOver突然总是返回真

我一直试图弄清楚这一点,从我的发现来看,这是因为 JVM 没有携带尽可能多的类型信息。这会导致一些信息丢失(“擦除”),并且有一些方法可以在 scala 中解决这个问题,以前使用清单,现在使用类标签和类型标签。

我还没有真正能够更具体地弄清楚它是如何工作的,虽然我有时能够从互联网上复制代码片段来做类似的事情,但我并不真正理解这些代码是如何工作的,我也不能适应这个例子。我还注意到有一个无形库对这种东西有很多支持,但我也想了解它自己是如何工作的。

0 投票
0 回答
103 浏览

replication - 复制和擦除编码技术之间的区别

我希望我在正确的社区中提问,如果没有,任何建议将不胜感激。

我正在做一份调查报告,我正在对纠删码和复制技术进行比较。在这个阶段,我正在对它们进行比较,具体参数如下。

我正在尝试构建的表正在处理区分哪种技术更好的参数:存储效率、可用性、持久性、编码时间、故障延迟和重建成本。

由于发生故障时复制在读取性能方面更快,所以当我说复制技术在故障时具有更高的延迟时是否正确?编码时间也是如此,说复制具有较高的编码时间是否正确,因为它在写入时具有更好的性能时间?

纠删码系统的故障重建成本是否高于复制?它涉及更多的磁盘 I/O 吗?如果故障是暂时的还是永久性的,情况会有所不同吗?

如果我根据瞬时和永久故障比较所有上述参数,会不会提供更多信息?

如果我将它们进行如下比较是否正确?

纠删码:更高(耐久性、存储效率、可用性)和更低(编码时间、故障延迟、重构成本)

复制: 更高(编码时间、故障延迟、重构成本)和更低(持久性、存储效率、可用性)

0 投票
3 回答
901 浏览

java - 使用泛型进行 Java 和 Kotlin 转换。失去类型安全

在使用 Kotlin/Java 编码时,我在使用强制转换和泛型时偶然发现了一些相当奇怪的东西。似乎有可能让类型系统相信一个列表是该类型的List<Foo>,而它实际上是一个List<Object>.

谁能向我解释为什么这是可能的?

这是该问题的 Kotlin 和 Java 示例:

Kotlin 中的示例

Java 中的示例

0 投票
2 回答
1950 浏览

generics - 字段的设置器被类型投影删除

我有以下SSCCE:

这对我来说似乎很好,但编译器抱怨说:

我不知道这甚至意味着什么,更不用说如何纠正它了。这里发生了什么,我该如何解决?

0 投票
1 回答
41 浏览

java - 编译器要求覆盖集合中的可选方法

我正在和我的同学创建一个全班项目,我应该为某些功能创建拉取请求,但是我在创建类并以一种可以编译的方式覆盖方法时遇到了一些问题(我现在不需要写方法,那是项目,我只需要它来编译)。我发现大多数方法都有效(或者至少编译器没有抱怨),但我对一些事情感到困惑:

  • 编译器抱怨可选的方法(如 set 和 addAll)

  • 方法 addAll,虽然它被添加,但抱怨它没有被覆盖,虽然它是,当我为它添加另一个 addAll 方法时,我也得到一个擦除错误。

我已经阅读了很多关于它的内容,但我找不到关于如何解决它的正确结论。我只是使用 Atom 来编写我的代码和终端,没有花哨的 IDE(也许我应该学习一个)。

如果不清楚,我只是希望有可用的方法的存根,而不是每个方法的全面答案,因为这是有类的项目。

0 投票
0 回答
42 浏览

java - 为什么我们不能重载基于泛型列表的方法

我知道由于类型擦除,所有泛型参数在编译过程中都会被擦除,所以如果我们有以下方法

在类型擦除后,它们最终都会看起来像这样

在您考虑到编译器不会让您这样做之前,这一切都是可以理解的

如果我们尝试做这样的事情,编译器不会让我们这样做,这意味着编译器知道我们列表的泛型类型。所以我很困惑为什么编译器更愿意向我们抛出错误,但假装它无法区分两个重载方法之间的区别?