我正在编写一个可以保存位图和字符串的通用缓存,所以我可以在不同的加载器中使用它。
public class Cache<T> {}
在某些时候我必须计算对象的大小:
private long getSize(T t)
{
if (t == null) return 0;
if (t instanceof Bitmap) return ((Bitmap)t).getRowBytes() * ((Bitmap)t).getHeight();
if (t instanceof String) return ((String)t).getBytes().length;
return 0;
}
这就是我现在这样做的方式。我想知道这是否正确,是否有更好的方式像多态类型决定这样做?
---编辑---------------------------------------
我想出了另一种方式,它宣告了getItemSize的抽象。因此,每个加载器都可以使用所需的getItemSize从基本缓存扩展自己的缓存。
class BitmapCache extends Cache<Bitmap>
{
@Override
public long getSize(Bitmap bitmap)
{
if (bitmap == null) return 0;
return bitmap.getRowBytes() * bitmap.getHeight();
}
}
答案 0 :(得分:3)
如果您计划实施更多类,而不是反复检查instanceof
,则应使用具有getSize()
方法或类似方法的包装类。
public interface DataWrapper {
public long getSize();
}
//...
private <T extends DataWrapper> long getSize(T t) {
return t.getSize();
}
// or even just
yourGeneric.getSize();