Ich habe ein paar Methoden auf einem Merkmal wie so:Scala - beschränken gattungsgemäßen Art auf etwas anderes als Zukunft
trait ResourceFactory[+R] {
def using[T](work: R => T): T
def usingAsync[T](work: R => Future[T]): Future[T]
}
Leider gibt es nichts in der Art checker Sie zu stoppen die erste using
Methode mit einem Aufruf der Funktion Zurückgeben einer Future
. Ich möchte, dass der Compiler darauf besteht, dass der Typ T
in der ersten Methode etwas anderes als Future
ist, um diesen Fehler zu verhindern - ist das möglich?
import scala.concurrent.Future
import shapeless._
trait ResourceFactory[+R] {
def using[T](work: R => T)(implicit ev: T <:!< Future[_]): T = ???
def usingAsync[T](work: R => Future[T]): Future[T] = ???
}
Dann:
Dank
Ich habe [dies] (https://stackoverflow.com/questions/6909053/enforce-type-difference) verwendet, um ehrlich zu sein, nicht sicher, dass es mit höheren Arten arbeiten wird. –