2

クラスが実装している特性を見つけるために、ScalaのどこかにイントロスペクションAPIがありますか?

Scala 2.9.2の場合、それはです。

4

2 に答える 2

2

Scala の Trait は Java のインターフェイスに変換されるため、Java のリフレクション ライブラリを使用して、実装されている Trait を見つけることができます。次に例を示します。

trait Foo
class Bar extends Foo 

val b = new Bar
b.getClass.getInterfaces.foreach(println)

これは以下を出力します:

interface Foo
interface scala.ScalaObject
于 2012-10-27T10:27:22.897 に答える
0

Kim Stebel が使用した例は、特性がスーパークラスによって実装されている場合は機能しないことに注意してください。より一般的な形式は次のとおりです。

  def implementsInterface(target: Class[_], someInterface: Class[_]): Boolean = {
    val i = target.getInterfaces
    i.foreach((c: Class[_]) => if (c == someInterface) return true)

    val s = target.getSuperclass

    if (s == null) false
    else implementsInterface(s, someInterface)
  }
于 2013-02-04T16:53:08.017 に答える