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
。
巴扎黑2017-04-17 17:30:43
親型のサブクラスおよび変数で定義されたメソッド (依然として親クラス参照と呼ばれます) を呼び出すと、コンパイル エラーが発生します。
オブジェクトが実際にサブクラス オブジェクトである場合 (new
がどれであるかを参照)、親クラス参照をサブクラス参照にキャストして、サブクラス メソッドを呼び出すことができます。
ただし、この親クラス参照によって参照されるオブジェクトがサブクラス オブジェクトであることが明確にわかっていない限り、この変換は危険であるため、最初に instanceof
を使用して判断できます。もちろん、自分でわかっているのであれば、判断する必要はありません。
うっかり間違えると、java.lang.ClassCastException
(コンパイル時ではなく実行時)
巴扎黑2017-04-17 17:30:43
この先には裁きが待っています if (drawable instanceof AsyncDrawable)
if が true であるため、drawable は AsyncDrawable でなければならず、強制的な型変換が失敗した場合は例外がスローされ、NULL を返すことはできません