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
。
Kaedah yang ditakrifkan dalam subkelas dan pembolehubah jenis induk (masih dipanggil rujukan kelas induk) tidak boleh dipanggil Jika dipanggil, ralat kompilasi akan berlaku.
Jika objek itu sememangnya objek subkelas (lihat yang mana
new
), anda boleh menghantar rujukan kelas induk kepada rujukan subkelas, dan kemudian anda boleh memanggil kaedah subkelas.Tetapi penukaran ini berisiko, melainkan anda tahu dengan jelas bahawa objek yang dirujuk oleh rujukan kelas induk ini ialah objek subkelas, jadi anda boleh menggunakan
instanceof
untuk menilai terlebih dahulu. Sudah tentu, jika anda mengetahuinya sendiri, anda tidak perlu menilai.Jika anda secara tidak sengaja membuat kesilapan, ia akan membuang
java.lang.ClassCastException
(masa jalan, bukan masa menyusun)Ada penghakiman di hadapan
if (drawable instanceof AsyncDrawable)
Memandangkan jika benar, drawable mestilah AsyncDrawable, dan jika penukaran jenis paksa gagal, pengecualian akan dilemparkan dan mustahil untuk mengembalikan NULL
Bukankah ia sangat jelas dalam kod? Apa yang dikembalikan ialah: return asyncDrawable.getBitmapWorkerTask();