假设我有一个Java类:
public class Foo {
public static <T> T doSomething(Class<T>) { ... }
public static <T> T doSomething(TypeToken<T>) { ... }
}
现在我希望&#34; Scalafy&#34;它。也就是说,创建类似的东西:
object Bar {
def doSomething[T]: T
}
显然,这不会编译:
def doSomething[T] = Foo.doSomething(classOf[T])
做这样的事情要求我将T
限制为没有类型参数的类型:
def doSomething[T: ClassTag] = Foo.doSomething(classTag[T].runtimeClass.asInstanceOf[Class[T]])
现在,当然,您始终可以通过TypeToken
方法汇集所有内容,但假设Class
方法很便宜且TypeToken
方法很昂贵。我想问的问题是,是否存在某种用户定义的类型约束,类似于=:=
或<:<
,我可以隐式传递以确保T
没有类型参数(更具体地说,classTag[T].runtimeClass
是Class[T]
而不是Class[_ >: T]
}?