【发布时间】:2023-04-01 04:52:01
【问题描述】:
在java中,我们可以有一个以Class为参数的方法,例如:
void someMethod(Class className)
{
System.out.println(className);
}
类似地,在 scala 中有没有办法代替 Class,将 Trait 作为参数?
【问题讨论】:
标签: scala
在java中,我们可以有一个以Class为参数的方法,例如:
void someMethod(Class className)
{
System.out.println(className);
}
类似地,在 scala 中有没有办法代替 Class,将 Trait 作为参数?
【问题讨论】:
标签: scala
如果你能做到,你会如何使用它?
Scala trait 被编译成一个接口和一个对应的类。您可以将接口传递给方法(因为接口是一种类):
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
【讨论】: