说我有方法:
def foo(t: java.lang.reflect.Type) = ???
我希望在(Int, Int)
上调用它。
这样的电话怎么样?我试过了:
foo(typeOf[(Int, Int)])
但它似乎不起作用,因为它返回scala.reflect.runtime.universe.Type而不是java.lang.reflect.Type
。
答案 0 :(得分:5)
您应该使用classOf
的{{1}}方法(默认导入):
Predef
请注意,即使您要调用接受"".getClass
// Class[_ <: String] = class java.lang.String
classOf[String]
// Class[String] = class java.lang.String
的{{1}}方法,也不应自行创建foo
这样的方法。您可以使用java
:
java.lang.reflect.Type
正如您在呼叫方面所看到的,您不需要辅助功能,例如ClassTag
或import reflect.{ClassTag, classTag}
def javaFoo(t: java.lang.reflect.Type) = t.toString
def foo[T: ClassTag]() = javaFoo(classTag[T].runtimeClass)
foo[String]
// String = class java.lang.String
。
正如@cmbaxter所说:由于类型擦除,classOf
无法获得typeOf
- Type
不包含有关类型参数的信息。您将Tuple2[Int, Int]
获得Type
:
Type
答案 1 :(得分:0)
public class Gdx {
//..
public static Input input;
//..
}
您可以将tag.mirror.runtimeClass(tag.tpe)强制转换为Class [_]或Class [T]。