Rumah > Soal Jawab > teks badan
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
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)
class A {
public void Do1() {
}
}
class B extends A {
public void Do2() {
}
}
public class Test {
public static void main(String[] args) {
A a = new B();
a.Do2(); // 错误: 找不到符号
((B) a).Do2(); // 成功
}
}
巴扎黑2017-04-17 17:30:43
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
天蓬老师2017-04-17 17:30:43
Bukankah ia sangat jelas dalam kod? Apa yang dikembalikan ialah: return asyncDrawable.getBitmapWorkerTask();