当前位置: 首页 > 面试题库 >

Scala是否可以在不更改JVM的情况下对泛型进行泛化?

凤经国
2023-03-14
问题内容

我最近开始学习Scala,但对它们的泛型也通过类型擦除实现感到失望(但并不感到惊讶)。

我的问题是,Scala是否可以使用通用化泛型,或者需要以某种方式更改JVM?如果确实需要更改JVM,则到底需要更改什么?


问题答案:

否-如果该Scala字节码不支持统一的泛型,则Scala不可能作为Java等效字节码运行。

当您问 “需要更改什么?”时 ,答案是: 字节码规范 。当前,字节码不允许定义变量的参数化类型。已经决定,作为对字节码的修改以支持统一泛型将
破坏向后兼容性

,因此泛型必须通过类型擦除来实现。

为了解决这个问题,Scala利用其implicit机制的强大功能来定义一个 Manifest 可以在任何范围内导入的a
,以便在运行时发现类型信息。清单是实验性的,基本上没有记录,但它们是2.8中的一部分。这是有关Scala泛型/清单的另一个很好的资源



 类似资料:
  • 问题内容: 我知道Go将来不会有泛型,并且有一些建议可以用其他结构代替它们。但是在下面的例子中,我陷入了困境。 您可能会猜到,我试图使任何错误均告失败,并且希望将任何返回两个结果的函数放到第二个错误中。这工作正常,但丢失了它的类型信息,并且结果中只是一个空接口。 由于我也正在调用lib函数,因此我看不到使用Interfaces或Reflection解决此问题的方法。 有任何想法吗?我是完全走错了道

  • 我感兴趣的是设计一个用户构建的函数,在其中输入任何包含因子和数值的数据集,并以csv格式生成输出。 我尝试过使用各种形式的dplyr,但我认为选择提取我的变量,我仍然希望它是我的数据集的一部分,所以函数组织我的各种因素。 我想出了一个函数的两个想法。它们中的一些是有效的,但是我把所有的东西都塞进了函数中,所以我出错了。 我在比较dplyr和基本R,为了简洁起见,代码更少 我很好奇为什么dplyr会

  • 这个问题用泛型约束标记为重复,where T:struct和where T:class和旧标题,它是。所以我更新了标题,以便更好地表达我的问题。我想问的是,如何调用泛型方法并仅在参数不为null的情况下才使用该参数,而不使用装箱。 一些为链接问题解释的变通方法可以用来回答这个问题,但我仍然相信这是一个根本不同的问题。

  • 我有一个雇主组合。选择雇主后,表格中会填入特定于雇主的数据: 下面是它绑定到的属性和检查表是否脏的方法。如果表是脏的,则提示用户如果他们改变雇主,改变将丢失: 一切似乎都正常工作: 用户选择更新表的雇主('KMH')。 用户对表进行更改。 用户然后选择不同的雇主('MPC') 提示用户更改将丢失 用户选择“否”并且Can火雇主返回“假” 选择雇主不改变(跳过if{}块) 然而,在GUI中,雇主选项

  • 我试图在Scala中返回抽象泛型类的子类,但它无法编译。我得到A类型的表达式不符合预期的B类型。这是我使用的代码: 创建()的签名应该是什么? 谢谢

  • 我已经从源代码处构建并安装了另一个glibc,并且我想让现有的用C++编写的可执行文件与自定义glibc一起运行,以供实验之用。为了做到这一点,我尝试更改可执行文件的加载程序。首先,在/lib64下创建了一个名为的链接,其路径指向新的加载程序 其次,通过文本编辑器修改了可执行文件中的加载器路径,将“/lib64/ld-linux-x86-64.so.2”更改为“/lib64/ld_linux-x8