1
11
好,
escape analysis
丰富的包装
为了呼叫
在多大程度上
实际发生
显然将取决于运行时
热点
JVM决定在对象创建中添加这些方法。当escape分析不发生时,显然JVM必须“框”(如您所说)
很明显,只有当您确实在编写非常低的延迟代码时,如果您试图最小化垃圾创建(在一个紧密的循环中),这些问题才会成为任何类型的问题。只有你知道是不是这样。 至于这种方法是否对你有用(逃逸分析有助于你),你必须在野外进行测试。众所周知,为这类事情编写微基准非常困难。 我不太喜欢这些类型别名的原因 作为公共API的一部分 scala并没有像我希望的那样严格地执行它们。例如:
|
2
4
在给定的示例中,实际上还没有创建新类型,它只是预先存在的长类型的别名。
你可以很高兴地通过
如果您真的想创建一个具有强制类型安全性和方便的模式匹配的新类型,我将使用case类:
而且,为了方便起见,甚至可能提供隐式Long=>PrimitiveDate转换。 |
3
3
在你问了这个问题11个月后,迈尔斯·萨宾发现了一种非常简单、优雅和高效的创作方法 unboxed newtypes 在斯卡拉。与类型别名不同,类型标记是强制的。原语类型需要最少的样板(每个原语一行)来提供专门化。 一年后,他又加了一个 more polished and robust version 从这个到 Shapeless . 如果你不想要这个优秀的库的其余部分,这个概念是简单和简洁的,可以在一个项目中复制而不添加shapelize。 当然,你和回答你问题的人可能都知道这一点,但值得在这里补充一点,因为这仍然是一个重要的问题。 |
Than21 · scala确保块中的隐式转换失败 6 年前 |
Dr. Strangelove · C#协方差:具有不同接口特征的类 7 年前 |
Ash · 使用转换运算符强制转换对象失败 7 年前 |
Skye MacMaster · 具有隐式类型转换的调用函数 7 年前 |