0

asInstanceOf[]とはどう違いisInstanceOf[]ますか?

4

2 に答える 2

6

一般的に言えば、a.asInstanceOf[B]実際のキャストを実行します。タイプ A のオブジェクトを受け取り、(可能であれば) タイプ B のオブジェクトを返しますが、タイプがあるかa.isInstanceOf[B]どうかを示すブール値を返します。aB

厳密に言えば、 isInstanceOf[B] は、a が B 型である場合だけでなく、a が上位側の継承ツリーに B 型を持っている場合 (つまり、B が a のスーパークラスである場合、isInstanceOf が true を生成する場合) に見えます。重要な注意点は、isInstanceOf が実際の参照型ではなくオブジェクト型階層。

于 2013-07-11T08:16:30.377 に答える
3

共通パターンを追加したいだけです

if (x.isInstanceOf[B]) {
    val b = x.asInstanceOf[B];
    ...
} else ...

次のようにうまく書くことができます

x match {
    case (b: B) => ...
    ...
}

これは、1 つの に対してこの種のテストが複数ある場合に特に便利ですx

于 2013-07-11T12:46:19.700 に答える