问题标签 [classtag]

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 回答
60 浏览

scala - Scala Any => 原生格式

我有一个 type 的地图Map[_, Any],我想以它们的本机格式提取值(不求助于.asInstanceOf[_])。

像这样的东西...

显然那是失败的。

我不喜欢这种方法,但我想我可以做这样的事情......但即使这样仍然出现Any而不是Intor String

然后我想也许是一些包装Map...

但这仍然是Any. 我只是不知道如何转换 Any => native。

所以我的问题是...

  1. 为什么会失败?
  2. 以原始格式获取值的更好方法是什么?最简单和/或没有外部依赖是理想的......但我真的对任何事情都持开放态度(尽管需要注意的是我现在仍在使用 scala 2.11)。

谢谢!

0 投票
1 回答
150 浏览

scala - Scala中的类标签

在 Scala 中,在类型擦除期间,泛型变量在泛型变量出现在类型位置的任何地方都被“对象”类型替换。

EG: val x T; --> 被替换为val x Object;

因此,传递的确切类型的详细信息将在运行时变得不可用。

为了克服这个问题(在运行时获得确切的类型),提到 ClassTag 将帮助我们。

你能帮我ClassTag在运行时如何获取类型信息吗?

当提到 ClassTag 时,它也是用上下文绑定的泛型类型编写的。

例如:def method[T:ClassTag] {...}

所以我认为,这里提到的“T”也将被删除。但是 ClassTag 以某种方式保留了类型信息。我有点困惑这是如何工作的..(类似 TypeTag 和 WeakTag 也是如此)