で同じクラスの戻り値と同じタイプを拡張することができ、私はこのような何かを行うことができるようにしたい:がどのように二つの異なるクラスはScalaの
は、我々は2 ScalaはA
とB
をパッケージ化していると仮定します。 B
では、私はこのような二つのクラス、持っている:
class Structure{
case class StructureA(x:String, y:String)
case class StructureB(x:Int, y:Int)
}
class OperationB extend Structure{
def optB(someData:String): Array[(StructureA,StructureB)] = {...}
}
をしてA
で、私はこのような一つのクラスがあります。
import B.Structure
class OperationA extend Structure {
def optA(data:Array[(StructureA,StructureB)]): Array[(StructureA,StructureB)] = {...}
}
そして、以下の私のプロジェクトエントリです:
import B.{Structure,OperationB }
import A.OperationA
object Main {
def main(args: Array[String]): Unit = {
val BInstance = new OperationB()
val BResult = BInstance.optB(someData)
val AInstance = new OperationA()
val AResult = AInstance.optA(BResult)
}
}
を問題は次のとおりです。
BResultはtypeof配列[(StructureA、StructureB)]ですが、cにすることはできませんompiled、エラーメッセージが
type mismatch, expected Array[(A.StructureA,A.StructureB)] actual Array[(B.StructureA,B.StructureB)]
実際に私はそれにこのコードを追加して、それが正常にコンパイルすることができますが、私はそれが最善の解決策ではないと思います。
import B.{Structure,OperationB }
import A.OperationA
object Main {
def main(args: Array[String]): Unit = {
val BInstance = new OperationB()
val AInstance = new OperationA()
// here convert it into proper type.
val BResult = BInstance.optB(someData).map{
case (a,b) => (a.asInstanceOf[AInstance.StructureA],b.asInstanceOf[AInstance.StructureB])
}
val AResult = AInstance.optA(BResult)
}
}
私は長い間迷惑をかけていますが、誰でも助けてくれますか?
のですか?パッケージAにも '構造'がありますか? (これは[XY問題](https://meta.stackexchange.com/q/66377)ですか?) –
私はStructureA/StructureBをデータコンテナとして使用し、パッケージAには何もありません。 – Yang