このコードの出力がではなくtrue true
である理由を説明することはできますか?Scala:isInstanceOfの汎用抽象タイプが無視される
true false
を使用して出力を達成する方法を知りたいと思います。def apply(in:Any)
を使用してください。私もパラメータ化された型を試したが、それでもtrue false
の代わりにtrue true
を得る。
object TestClass extends App {
val xTrue = TypeXObject(TypeX("s"))
val xFalse = TypeXObject(TypeY(1))
}
case class TypeX(string:String)
case class TypeY(int:Int)
object TypeXObject extends HasAbstractType{override type T = TypeX}
object TypeYObject extends HasAbstractType{override type T = TypeY}
abstract class HasAbstractType {
type T
def apply(in:Any):Any = {
println(in.isInstanceOf[T])
in
}
}
回答:
issues.scala-lang.org/browse/SI-5042 - 記事と私はmanifest[T1].erasure.isInstance(t1)
とmanifest[T1].erasure.isInstance(t2)
でtrue false
を得ることができることを見出した付属品付き。
https://issues.scala-lang.org/browse/SI-5042 - あなたの記事とこの記事では、 'manifest [T1] .erasure.isInstance(t1)で' true false'を得ることができました。 'と'マニフェスト[T1] .erasure.isInstance(t2) 'を実行します。助けてくれてありがとう – George