2 つのクラス タイプを比較できる関数を定義したいと考えています。2 つの異なるクラスを定義しました。
abstract class Task
case class DefinedTask(id: Long) extends Task
case class EmptyTask() extends Task
次に、タイプ のオブジェクトを返す関数があります。これは または のTask
いずれDefinedTask
かEmptyTask
です。
ここで、私がやりたいのは、このオブジェクトが であるDefinedTask
か、単なる であるかを識別する関数を用意することEmptyTask
です。問題は単純です。パターン マッチングを使用します。Defined/Empty
しかし、複数のクラスがこのパターン に当てはまるため、一般化したいと思います。
私がこれまでに試したことは次のとおりです。
def makeReturned[T: Manifest, U: Manifest](obj: T)(u: U)(f: T => Value) =
if(manifest[U] equals manifest[T]) f(obj) else
throw new IllegalArgumentException()
}
//call to it
makeReturned(task)(DefinedTask)(makeTask)
U
は常にDefinedTask
であり、T
どちらでもかまいませんがDefinedTask or EmptyTask
、 として返されTask
ます。
manifest[U].erasure.toString //"class DefinedTask$"
manifest[T].erasure.toString //"class Task"
これはコンパイラの観点からは正しいですが、私には向いていません。それで、私の質問は、私が望むものを得る方法でそれらを比較するにはどうすればよいですか?