问题标签 [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 回答
292 浏览

scala - 擦除后具有相同类型的方法的 Scala 解决方法

我想出了如何使用 aTypeTag将空参数列表添加到现有方法并绕过擦除错误。我想了解我的 hack 是如何工作的,以及是否有更好的方法来实现预期的结果。

我有以下happyStuff方法:

我想更改方法签名happyStuff并弃用旧方法,如下所示。

此代码给出以下错误消息:“def happyStuff(s: String): String at line 6 and def happyStuff()(s: String): String at line 10 have the same type after erasure”。

这个 hack 让我得到了我想要的结果:

如何TypeTag解决擦除消息?有没有更好的方法来达到预期的结果?

0 投票
0 回答
168 浏览

java - Java 错误:名称冲突:类中的方法覆盖了一个方法,该方法的擦除与另一个方法相同,但都没有覆盖另一个

我的项目中有如下代码:

当我尝试编译它时出现错误:

知道是什么导致了错误吗?为什么第一种方法有 Object 而不是 generic validate(Object)

0 投票
0 回答
228 浏览

java - SAP Hybris Commerce 6.2 Cuppy 项目设置问题

名称冲突:convertAll(Collection<SOURCE>)GenericCollectionConverter 类型的方法与 Converter 类型具有相同的擦除,convertAll(Collection<? extends SOURCE>)但不会覆盖它
下面的文件在使用 Java 1.8 和 WS-Core 2.3 jar 在 CMD 中执行 Ant Clean All 安装时给出上述错误

0 投票
1 回答
50 浏览

java - 如何使用类型擦除来使用继承方法?

我正在尝试使用类型擦除来访问通用类型的继承方法。

我有一个父类 Space 和子类 Scalar、Vector、Mapping 等。我想要一个接口 Function,我可以为它指定 Space 的各种子类之间的域和范围。

Mapping 类包含接口 Function,并且应该能够通过方法 Of 访问它。

如果程序员想取一个双精度的映射,即

然后我希望函数 Of 将双精度转换为标量,然后将其传递给接口函数。

Eclipse 建议将 Scalar 转换为 Domain,但由于 Domain 扩展了 Space,Scalar 也是如此,所以 Scalar 不应该被接受传递给 Function 吗?

编辑:

我有每个子类的构造函数,它们将 Scalar 作为参数,例如Public Vector(Scalar x){...}. 我想Mapping接受一个双精度数,将其转换为 a Scalar,然后如果Domain函数的 是,例如,一个向量,那么我想Vector(Scalar x)调用构造函数。

理想情况下,我只会有一个双精度的父构造函数:

但我无法实现泛型类型。这是我试图解决的问题。有没有更好的方法来做到这一点?

0 投票
2 回答
41 浏览

java - 如何从擦除中投射通用类型

我有一个父类,Parent有两个子类,AB。我有一个接口,Function<Type1 extends Parent,Type2 extends Parent>允许程序员编写一个特定的函数,Type2 of(Type1 t)它将 Type1 转换为 Type2。该接口被包装在一个类中,该类Wrapper<Type1 extends Parent,Type2 extends Parent>包含有用的信息,例如Class<Type1> type1Class等。

当我尝试为该类实现一个add方法时,我的问题出现了, . 我正在尝试将两个s 加在一起,但由于擦除,我很难输出 a 而不是 a 。WrapperWrapper<Type1,Type2> add(Wrapper<Type1,Type2> additionalWrapper)FunctionType2Parent

如何使add方法输出 aType2而不是 a Parent

0 投票
1 回答
46 浏览

java - 擦除类型和桥接方法说明

以下代码取自 Oracle 泛型文档 -

我对这段代码的理解-

Q - 方法被setData覆盖还是重载?

我的理解 - 因为MyNode是扩展Node<Integer>,类型参数的值T设置为Integer

所以类Node有方法setData(Integer data) T= Integer 和类MyNode有方法setData(Integer data)

它是压倒一切的,因为签名是相同的。

Q- 即使在擦除之后,方法 setData 是否也会被覆盖? 我的理解 -

在我们擦除<T>set 方法之后,Node变成了,setData(Object data)

并且 set 方法Mynode将是 -setData(Integer data)因为没有类型参数,所以没有什么可删除的。

但这是超载的。

问 - 我们想要重载还是覆盖?

我的理解 - 从擦除之前定义的方法的外观来看,我们想要覆盖.

Q - 那么如何在擦除后实现覆盖?

我的理解 - 通过桥接方法。例如:

我的理解正确吗?

另外, class MyNode extends Node<Integer>什么时候Integer传递给<T>?什么时候调用超级?

0 投票
2 回答
44 浏览

scala - 当类型被擦除时,隐式如何找到使用泛型调用的正确方法?

在下面的代码中,我有一个函数test接收一个磁铁类型的对象,我有两个隐式方法将 List[Int] 转换为磁铁,另一个将 List[String] 转换为磁铁。

如果JVM由于运行时类型擦除而应该松散泛型中的类型,在我下面的代码中,方法fromListIntfromListString看起来都像 List[Any] 对吗?因为当我用相同的名称命名两个函数时,我收到错误error: double definition:提示 List[Int] 和 List[String] 被认为是相同的。

当我通过 List(0) 和 List("0") 时,在这种情况下如何找到正确的隐式方法?

0 投票
1 回答
51 浏览

java - 如何获得重载方法来识别泛型类型的特定子类?

我有一个经常用泛型类型的参数调用的方法,我希望它的行为根据参数的特定子类而有所不同。例如,下面的代码:

产生以下输出:

我原以为它会在第 4 行调用 bar 方法,因为在这种情况下 T 是 bar ,但它始终将其识别为父类并提供默认行为。

我曾考虑过在方法中对 instanceOf 进行大量调用,但这感觉有点 hacky。我想到的另一个解决方案是在每个调用正确方法的子类中重写一个抽象方法,但这似乎也很hacky。有没有正确的方法来做到这一点?或者,如果我处理这一切都错了,有没有更好的方法来处理这种情况?

0 投票
2 回答
145 浏览

java - 返回类型为“T”且方法参数由通配符组成时,返回类型与方法参数冲突

我正在尝试运行代码。我和我得到两个编译错误: 1.ReferenceSystem.out.println不明确(获取 char[] 的方法和获取 String 的方法之间的冲突) 2.Cap#1 无法转换为 T 返回 st.pop()

我知道我可以更改 getMethod 签名以返回 Number 并且程序将被成功编译,但我想了解为什么使用当前签名会出现编译错误?AFAIK,无界限的 T 被视为Object和声明返回Object的函数可以返回任何 Object,因为Object是所有类(包括 Number)的“父亲”。有人可以让我在这里解雇我吗?

0 投票
1 回答
57 浏览

java - 如何避免 Java 中的这种擦除错误?

我有一个类似于Set interface方法的自制存储对象。我想让它兼容,Set以便它可以与Collections 兼容。问题是它是一个泛型类,而泛型类使用类型变量作为方法参数。

我说的两种方法:

我有:

Set interface有这个:

编译器告诉我有某种擦除错误。我可以removeremove(T var)它是什么改变为删除(Object var),但我不喜欢这样做。

Set是否有另一种方法可以在不更改我原始方法签名的情况下使其兼容?