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"
これはコンパイラの観点からは正しいですが、私には向いていません。それで、私の質問は、私が望むものを得る方法でそれらを比較するにはどうすればよいですか?