【问题标题】:Scala - Passing Trait type as method parameterScala - 将特征类型作为方法参数传递
【发布时间】:2023-04-01 04:52:01
【问题描述】:

在java中,我们可以有一个以Class为参数的方法,例如:

void someMethod(Class className)
{
   System.out.println(className);
}

类似地,在 scala 中有没有办法代替 Class,将 Trait 作为参数?

【问题讨论】:

    标签: scala


    【解决方案1】:

    如果你能做到,你会如何使用它?

    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 answerthis one

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 1970-01-01
      • 2016-08-07
      • 2015-12-26
      • 2015-03-22
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多