在java中,我们可以有一个将Class作为参数的方法,例如:
void someMethod(Class className)
{
System.out.println(className);
}
类似地,scala中有一种方法可以将Trait作为参数而不是Class吗?
答案 0 :(得分:4)
如果你能这样做,你将如何使用它?
Scala特征被编译成接口和相应的类。您可以将接口传递给方法(因为接口是一种类):
scala> trait Foo
scala> val c: Class = classOf[Foo]
a: Class[Foo] = interface Foo
scala> def someMethod(c: Class[_]) = c.getName
scala> someMethod(a)
res1: String = Foo
将类部件编译为隐藏的Foo$class
类文件。但是,您可以将实现您的Trait的类传递给方法。由于分解为底层Java类和接口,我不知道直接传递Trait的方法。
另请参阅this answer和this one