问题标签 [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.
scala - Manifest[T].erasure 在 2.10 中已弃用,我现在应该使用什么?
我有以下代码:
我们的想法是像这样使用它:
但是编译器(2.10)现在说不manifest.erasure
推荐使用。我现在应该为同样的功能使用什么?
java - 方法重载时重复方法
以下代码给出了错误“重复方法”的编译错误
这是意料之中的,因为两个重载方法都具有相同的签名,并且仅在返回类型上有所不同。
但是下面的代码可以正常编译并发出警告:
正如我们所知,Java 泛型适用于 Erasure,这意味着在字节码中,这两种方法具有完全相同的签名并且返回类型不同。
此外,令我惊讶的是,以下代码再次给出了编译错误:
尽管有重复的方法,第二个代码如何在没有任何编译错误的情况下正常工作?
java - 实现 Comparable,compareTo 名称冲突:“具有相同的擦除,但都不会覆盖另一个”
我想要一个 compareTo 方法,它需要一个 Real(一个用于处理任意大和精确的实数的类 [嗯,只要它现在的长度小于 2^31])和一个 compareTo 方法一个对象,但 Java 不让我这样做,而且我没有足够的经验知道为什么。
我只是尝试修改该类以实现 Comparable,并在下面收到这些错误消息。我真的不明白错误消息的含义,但我知道这与我试图为班级提供一些灵活性的可怕方式有关,因为我为我所做的每一种方法提供了所有不同的方法签名,我可以修复它通过删除 compareTo(Object other) 方法,但理想情况下我想保留它。所以我真正要问的是:有没有办法让这些错误消息消失而不删除 compareTo(Object other) 方法,这些错误到底是什么意思?
另外,我知道已经有一些内置的 Java 类,比如 BigInteger 和类似的东西,我试图使用这个类,但我这样做是为了好玩/满足欧拉项目(https:// projecteuler.net/)。
这些是 compareTo 方法:
以及构造函数以防万一您需要它们:
scala - Scala 对带有两个隐式参数的重载定义的模糊引用
惰性 val productService = BeanLookup[ProductDataService]
斯卡拉克抱怨:
java - Java泛型类型擦除
我想问一下java类型擦除规则。
如果我们有课程:
你能解释一下为什么调用 setX() 方法会导致编译问题吗?
java - JAVA中逆变有什么好处
我想问一下在JAVA中使用逆变器有什么好处?
假设我们有两种方法:
我主要称它们为:
有什么不同?逆变似乎更糟糕,因为我们只能“获取”对象类型,那么为什么以及何时应该使用它呢?
java - Java - 抽象类的集合,子类包含不同的对象 - 处理这些包装对象的任何“好”方法?
假设我们有这样的事情:
假设我们有任意数量的扩展 MyClass 的类,每个类都有自己的不同类型的实例变量,尽管有些可能具有相同的类型。这是一个不幸的必要性。现在,假设我们有一个 MyClass 的集合。我们有一个包含任意数量子类的集合,每个子类都包含一个对象。假设我需要遍历这个 Collection,从任意数量的元素中检索所述对象,并对它执行操作,存储它,操作它,将它发送到其他地方等等。这些对象除了扩展 Object 之外没有任何共同点。
我也许可以简单地将这些操作委托给 MyClass 孩子自己,使用访问者等,但这可能是不可行的,因为这些操作可能依赖于集合中的其他 MyClass 孩子。单个 MyClass 子项可能不会单独决定要采取的操作,甚至不会决定任何单个 MyClass 集合。其中一些行动可能是累积的,并取决于许多其他潜在的累积因素。
有什么“好”的方法来处理这个问题,还是我会被诅咒到丑陋的类型检查条件或类似的地狱?我考虑在 MyClass 中使用泛型并在所有孩子上使用具体类型。这可以简化对象的检索,但仍然需要一个大的条件块。
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
.
java - 方法匹配接口原型,但不会覆盖
我有以下代码:
此代码显示以下错误:
在类声明行;它说它没有实现方法 public void push(T n); 在 public void push(T n) 线上它说:
myStack 的 push 方法与 StackInterface 的 push 具有相同的擦除功能,但不会覆盖它。
方法原型是相同的;添加@Override 什么都不做。为什么会这样?
scala - 我将如何在 Function1 或 PartialFunction 上实现加宽函数
我想在 Function1 或 PartialFunction 上定义一个加宽函数。
我想这样做是因为我有一个类似于以下的用例:
如上所示,为了实现这一点,我想到了定义一个加宽函数,如下所示:
但不幸的是,由于擦除,这不起作用。我尝试研究使用 TypeTags,但我似乎无法以令编译器满意的方式表达这一点。
澄清: 当我说它不起作用时,我的意思是当它实际上不应该抛出异常并在 ScalaKata 上的代码片段的特定情况下打印“未定义”时,它会在使用时抛出异常(参见 ScalaKata 代码片段)。
我的问题:
我怎样才能正确解决这个问题?Scalaz 或 Shapeless 中是否已经有我不知道的功能?首先这样做有意义吗?
这是包含所有代码的片段:http ://www.scalakata.com/527bb729e4b0b1a1c4db1a73