相关疑难解决方法(0)

Scala:在运行时获取 mixin 接口

我需要在运行时从给定的类获取所有接口(全部加载在类加载器中)。

例如,如果一个类是这样声明的:

trait B
trait C
trait D    
class A extends B with C with D
Run Code Online (Sandbox Code Playgroud)

我想在运行时获取以下信息:A 依赖于 B、C 和D。java getInterfaces() (或 clapper 库中的interfaces())方法仅给出第一个依赖项,即:A 依赖于 B

有办法实现吗?

我想通过反思,但我不知道如何?

reflection scala mixing traits scala-java-interop

5
推荐指数
1
解决办法
844
查看次数

使用覆盖来堆叠特征和抽象类

让我说我有以下代码,我允许混合生物,因为有人可以混合和匹配物种(例如,只有纯人类或纯外星人),我想有一个方法,解释什么是'混入',这是叫say:

trait Person {

  def say(): Unit

}

trait Human {

  def say(): Unit = println("Hi, I am a human")
}

trait Dude extends Human {

  override def say(): Unit = {
    super.say()
    println("Duuude!")
  }
}

abstract class Alien(msg: String) extends Person {

  def say(): Unit = println(s"Hi, I'm an alien: $msg")
}

class Hybrid(name: String) extends Alien("bleep") with Dude // does not work!

val someone = new Hybrid("John")
someone.say()
Run Code Online (Sandbox Code Playgroud)

这不能编译,因为:

error: overriding method say in class Alien …
Run Code Online (Sandbox Code Playgroud)

scala

0
推荐指数
1
解决办法
51
查看次数

标签 统计

scala ×2

mixing ×1

reflection ×1

scala-java-interop ×1

traits ×1