システム内の投稿を表すクラスがあります。投稿が質問、ドキュメント、画像などを表す場合。Postクラスが表すことができるオブジェクトには約7種類あります。私たちが持っている7種類のオブジェクトのそれぞれには、追加のオブジェクト固有の情報を格納するための独自のメタデータクラスがあります。
現在、私のPostクラスには7つのオプションの属性があり、そのうちの1つはオブジェクトのタイプに応じて入力されます。しかし、Postクラスではこれらの7つの属性のうち1つしか入力されないため、これらを任意の型の単一の属性に統合する方法はありますか?次に、match caseステートメントを使用して、実行時に正しいメタデータオブジェクトを生成できます。または、言語の強く型付けされた性質を考えると、Scalaではこれは不可能です。
コードは以下のとおりです。
case class Post (
id : Long,
typ : String,
name : String,
fileInfo : Option[FileInfo],
imageInfo : Option[FileImageInfo],
videoInfo : Option[FileVideoInfo],
audioInfo : Option[FileAudioInfo],
eventInfo: Option[EventInfo],
lectureInfo: Option[LectureInfo],
drawingInfo: Option[DrawingInfo]
)
object Post {
val simple = {
get[Long]("object_view.id") ~
get[String]("object_view.type") ~
get[String]("object_view.name") map {
case id~typ~name =>
Post(
id,
typ,
name,
FileInfo.getById(id),
FileImageInfo.getById(id),
FileVideoInfo.getById(id),
FileAudioInfo.getById(id),
EventInfo.getFirst(id),
LectureInfo.getById(id),
DrawingInfo.getById(id)
)
}
}