我想实现一些东西,可能是宏,来实现像
这样的东西Int --> java.lang.Integer
Float --> java.lang.Float
这样我就可以实现像
这样的东西def box[X <: AnyVal : Numeric](x: X) : Boxed[X] = ...
在实例化时会导致Boxed[Int]
成为java.lang.Integer
。
我并不太关心具体的语法或实现方法
只要我可以编写可以对类型执行ad hoc映射的泛型方法和类
像上面一样。
我知道Scala库已经有像int2Integer这样的装箱用于装箱和拆箱,
但我需要以编译器可以检查的方式显式映射类型。
这主要用于实现类型类,其实例具有依赖于类型参数但以非参数方式的类型成员。
目前我在类型类的每个实例中显式定义此类型成员,
而不是从类型参数计算它,而是将样板添加到所有实例
以上功能只是一个例子。我真的在写类型课,我需要说一下:
trait Mapping[T, U] {
type MapBase = java.util.Map[Box[T], Box[U]]
type MapType <: MapBase
def create : MapType
...
}
Box [T]的行为如上所述。这旨在与专门的Java集合库(如FastUtil&amp; amp; amp; amp;宝库。类型类的实例会将MapType
实例化为专用类,以便
隐式对象LongIntMapping扩展Mapping [Long,Int] { 类型MapType = Int2LongOpenHashMap def create:MapType = ... }
应自动获取MapBase = Map[java.lang.Long, Java.lang.Integer]
,因为这就是FastUtil Int2LongOpenHashMap
实现的接口,即使它存储未装箱的基元。这是FastUtil中的一般模式:本机类型的集合为相应的盒装类型实现Java集合接口,这是我试图系统地实现的概念。当然,这仍然需要我想要使用的每个FastUtil集合的类型类实例。我也looking进入宏来解决/减少这个问题。 Mybe宏甚至可以避免使用类型类,但是生产代码和宏是实验性的......