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
。
子類別中定義的方法,父類型的變數(還是叫父類別引用順口)是不能呼叫的,如果呼叫會引發編譯錯誤。
如果物件確實是子類別物件(看
new
的是哪個),那可以將父類別引用強制轉換為子類別引用,之後就可以呼叫子類別方法了。new
的是哪个),那可以将父类引用强制转换为子类引用,之后就可以调用子类方法了。但是这种转换是有风险的,除非你清楚的知道这个父类引用所引用的对象是子类对象,所以可以先用
instanceof
来判断。当然,如果你自己清楚,也可以不判断。如果不小心搞错了类似,会抛
但是這種轉換是有風險的,除非你清楚的知道這個父類引用所引用的對像是子類對象,所以可以先用java.lang.ClassCastException
instanceof
來判斷。當然,如果你自己清楚,也可以不判斷。 🎜 🎜如果不小心搞錯了類似,會拋java.lang.ClassCastException
(執行時,非編譯時)🎜前面有判斷
if (drawable instanceof AsyncDrawable)
既然if為true,drawable 就肯定是 AsyncDrawable,而且強制型別轉換失敗會拋異常,也不可能回傳NULL
程式碼裡面不是很清楚嗎,回傳的是:return asyncDrawable.getBitmapWorkerTask();