我正在通过用它重写我的一些 Java 代码来探索 Scala。在其中一种 Java 方法中,我需要将类类型作为参数传递:
public void setType(Class<T> type)
在 Java 中,我可以这样做:
someobj.setType( MyClass.class )
但在 Scala 中,我似乎无法调用“MyClass.class”。我想知道如何在 Scala 中传递参数?
我正在通过用它重写我的一些 Java 代码来探索 Scala。在其中一种 Java 方法中,我需要将类类型作为参数传递:
public void setType(Class<T> type)
在 Java 中,我可以这样做:
someobj.setType( MyClass.class )
但在 Scala 中,我似乎无法调用“MyClass.class”。我想知道如何在 Scala 中传递参数?
你在追求classOf[MyClass]
。
scala> case class MyClass()
defined class MyClass
scala> def setType[T](t:Class[T]) = println(t)
setType: [T](t: Class[T])Unit
scala> setType(classOf[MyClass])
class $line23.$read$$iw$$iw$MyClass
Philippe 正确地指出,OP 需要从 Scala 调用 Java 方法。在这种情况下,需要有关 java 类的更多信息来确定意图,但如下所示:
爪哇:
public class JavaClass<T> {
public void setType(Class<T> type) {
System.out.println(type);
}
}
斯卡拉:
class MyClass()
object classtest {
val someobj = new JavaClass[MyClass] //> someobj : JavaClass[MyClass] = JavaClass@6d4c1103
someobj.setType(classOf[MyClass]) //> class MyClass
}
如果您只需要传递类类型并将其用于建模数据或/创建新实例,还有另一种方法可以做到这一点。
def doSomeThing[T](id: UUID, time: Date): List[T] = {
// do anything with T, it's a reference to class definition not an instance
List(T(id, time), T(id, new Date(time.getTime + 900 * 1000))
}
case class SomeClassA(id: UUID, time: Date)
case class SomeClassB(id: UUID, time: Date)
class NonCaseClass(p1: UUID, p2: Date)
doSomeThing[SomeClassA]()
doSomeThing[SomeClassB]()
doSomeThing[NonCaseClass]()
我让这段代码有点复杂,这里是包装器唯一的例子:
def doSomeThing[T]() = {
// do anything with T, it's a reference to class definition not an instance
}
case class SomeClassA(id: UUID, time: Date)
doSomeThing[SomeClassA]()