android - java强制类型转换.
PHP中文网
PHP中文网 2017-04-17 17:28:43
0
3
974

android training中的bitmap讲解中有这么一段代码

static class AsyncDrawable extends BitmapDrawable {
    private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;

    public AsyncDrawable(Resources res, Bitmap bitmap,
            BitmapWorkerTask bitmapWorkerTask) {
        super(res, bitmap);
        bitmapWorkerTaskReference =
            new WeakReference<BitmapWorkerTask>(bitmapWorkerTask);
    }

    public BitmapWorkerTask getBitmapWorkerTask() {
        return bitmapWorkerTaskReference.get();
    }
}
----------------------
private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) {
   if (imageView != null) {
       final Drawable drawable = imageView.getDrawable();
       if (drawable instanceof AsyncDrawable) {
           final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;
           return asyncDrawable.getBitmapWorkerTask();
       }
    }
    return null;
}

这里的drawable强制转换为AsyncDrawable,为什么这里的父类转换为子类asyncDrawable.getBitmapWorkerTask()不是返回null

PHP中文网
PHP中文网

认证0级讲师

全員に返信(3)
巴扎黑

親型のサブクラスおよび変数で定義されたメソッド (依然として親クラス参照と呼ばれます) を呼び出すと、コンパイル エラーが発生します。

オブジェクトが実際にサブクラス オブジェクトである場合 (new がどれであるかを参照)、親クラス参照をサブクラス参照にキャストして、サブクラス メソッドを呼び出すことができます。

ただし、この親クラス参照によって参照されるオブジェクトがサブクラス オブジェクトであることが明確にわかっていない限り、この変換は危険であるため、最初に instanceof を使用して判断できます。もちろん、自分でわかっているのであれば、判断する必要はありません。

うっかり間違えると、java.lang.ClassCastException (コンパイル時ではなく実行時)

がスローされます。 リーリー
いいねを押す +0
巴扎黑

この先には裁きが待っています if (drawable instanceof AsyncDrawable)

if が true であるため、drawable は AsyncDrawable でなければならず、強制的な型変換が失敗した場合は例外がスローされ、NULL を返すことはできません

いいねを押す +0
Peter_Zhu

コードでは、返される内容は次のようになります: return asyncDrawable.getBitmapWorkerTask();

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート