Get companion object of class by given generic type Scala

前端 未结 4 1328
星月不相逢
星月不相逢 2020-12-08 04:35

What I am trying to do is to make a function that would take a generic class and use a static method in it (sorry for Java language, I mean method of its companion object).<

4条回答
  •  旧巷少年郎
    2020-12-08 05:30

    A gist by Miles Sabin may give you a hint:

    trait Companion[T] {
      type C
      def apply() : C
    }
    
    object Companion {
      implicit def companion[T](implicit comp : Companion[T]) = comp()
    }
    
    object TestCompanion {
      trait Foo
    
      object Foo {
        def bar = "wibble"
    
        // Per-companion boilerplate for access via implicit resolution
        implicit def companion = new Companion[Foo] {
          type C = Foo.type
          def apply() = Foo
        }
      }
    
      import Companion._
    
      val fc = companion[Foo]  // Type is Foo.type
      val s = fc.bar           // bar is accessible
    }
    

    This should be compiled with the -Ydependent-method-types flag if using Scala 2.9.x.

提交回复
热议问题