问题标签 [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 投票
2 回答
2306 浏览

scala - Manifest[T].erasure 在 2.10 中已弃用,我现在应该使用什么?

我有以下代码:

我们的想法是像这样使用它:

但是编译器(2.10)现在说不manifest.erasure推荐使用。我现在应该为同样的功能使用什么?

0 投票
4 回答
13584 浏览

java - 方法重载时重复方法

以下代码给出了错误“重复方法”的编译错误

这是意料之中的,因为两个重载方法都具有相同的签名,并且仅在返回类型上有所不同。

但是下面的代码可以正常编译并发出警告:

正如我们所知,Java 泛型适用于 Erasure,这意味着在字节码中,这两种方法具有完全相同的签名并且返回类型不同。

此外,令我惊讶的是,以下代码再次给出了编译错误:

尽管有重复的方法,第二个代码如何在没有任何编译错误的情况下正常工作?

0 投票
3 回答
18808 浏览

java - 实现 Comparable,compareTo 名称冲突:“具有相同的擦除,但都不会覆盖另一个”

我想要一个 compareTo 方法,它需要一个 Real(一个用于处理任意大和精确的实数的类 [嗯,只要它现在的长度小于 2^31])和一个 compareTo 方法一个对象,但 Java 不让我这样做,而且我没有足够的经验知道为什么。

我只是尝试修改该类以实现 Comparable,并在下面收到这些错误消息。我真的不明白错误消息的含义,但我知道这与我试图为班级提供一些灵活性的可怕方式有关,因为我为我所做的每一种方法提供了所有不同的方法签名,我可以修复它通过删除 compareTo(Object other) 方法,但理想情况下我想保留它。所以我真正要问的是:有没有办法让这些错误消息消失而不删除 compareTo(Object other) 方法,这些错误到底是什么意思?

另外,我知道已经有一些内置的 Java 类,比如 BigInteger 和类似的东西,我试图使用这个类,但我这样做是为了好玩/满足欧拉项目(https:// projecteuler.net/)。

这些是 compareTo 方法:

以及构造函数以防万一您需要它们:

0 投票
1 回答
2317 浏览

scala - Scala 对带有两个隐式参数的重载定义的模糊引用

惰性 val productService = BeanLookup[ProductDataService]

斯卡拉克抱怨:

0 投票
1 回答
545 浏览

java - Java泛型类型擦除

我想问一下java类型擦除规则。

如果我们有课程:

你能解释一下为什么调用 setX() 方法会导致编译问题吗?

0 投票
0 回答
79 浏览

java - JAVA中逆变有什么好处

我想问一下在JAVA中使用逆变器有什么好处?

假设我们有两种方法:

我主要称它们为:

有什么不同?逆变似乎更糟糕,因为我们只能“获取”对象类型,那么为什么以及何时应该使用它呢?

0 投票
1 回答
298 浏览

java - Java - 抽象类的集合,子类包含不同的对象 - 处理这些包装对象的任何“好”方法?

假设我们有这样的事情:

假设我们有任意数量的扩展 MyClass 的类,每个类都有自己的不同类型的实例变量,尽管有些可能具有相同的类型。这是一个不幸的必要性。现在,假设我们有一个 MyClass 的集合。我们有一个包含任意数量子类的集合,每个子类都包含一个对象。假设我需要遍历这个 Collection,从任意数量的元素中检索所述对象,并​​对它执行操作,存储它,操作它,将它发送到其他地方等等。这些对象除了扩展 Object 之外没有任何共同点。

我也许可以简单地将这些操作委托给 MyClass 孩子自己,使用访问者等,但这可能是不可行的,因为这些操作可能依赖于集合中的其他 MyClass 孩子。单个 MyClass 子项可能不会单独决定要采取的操作,甚至不会决定任何单个 MyClass 集合。其中一些行动可能是累积的,并取决于许多其他潜在的累积因素。

有什么“好”的方法来处理这个问题,还是我会被诅咒到丑陋的类型检查条件或类似的地狱?我考虑在 MyClass 中使用泛型并在所有孩子上使用具体类型。这可以简化对象的检索,但仍然需要一个大的条件块。

0 投票
1 回答
88 浏览

c++ - Get reified type of symbol after the erasure phase of the Scala 2.9.3 compiler

I'm writing a compiler plugin that translates a subset of Scala to C++ (ignore the apparent insanity of this task). I'm using a number of plugins that must run after the erasure phase. However, I require the full type information to output valid code.

For example, for the Scala;

I'd like to output the C++;

However, after the erasure phase, foo looks like this:

I.e., the generic type information for the parameter, f, has been lost. I need to get it back some how. Any suggestions?

Reply to cdshines' comment

Here is an example:

example.scala

When I compile;

Note the change in the signature of func. explicitouter is the phase before erasure.

0 投票
2 回答
353 浏览

java - 方法匹配接口原型,但不会覆盖

我有以下代码:

此代码显示以下错误:

在类声明行;它说它没有实现方法 public void push(T n); 在 public void push(T n) 线上它说:

myStack 的 push 方法与 StackInterface 的 push 具有相同的擦除功能,但不会覆盖它。

方法原型是相同的;添加@Override 什么都不做。为什么会这样?

0 投票
3 回答
259 浏览

scala - 我将如何在 Function1 或 PartialFunction 上实现加宽函数

我想在 Function1 或 PartialFunction 上定义一个加宽函数。

我想这样做是因为我有一个类似于以下的用例:

如上所示,为了实现这一点,我想到了定义一个加宽函数,如下所示:

但不幸的是,由于擦除,这不起作用。我尝试研究使用 TypeTags,但我似乎无法以令编译器满意的方式表达这一点。

澄清: 当我说它不起作用时,我的意思是当它实际上不应该抛出异常并在 ScalaKata 上的代码片段的特定情况下打印“未定义”时,它会在使用时抛出异常(参见 ScalaKata 代码片段)。

我的问题

我怎样才能正确解决这个问题?Scalaz 或 Shapeless 中是否已经有我不知道的功能?首先这样做有意义吗?

这是包含所有代码的片段:http ://www.scalakata.com/527bb729e4b0b1a1c4db1a73