确定通用类型

时间:2014-02-06 18:47:56

标签: java android generics

我正在编写一个可以保存位图和字符串的通用缓存,所以我可以在不同的加载器中使用它。

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();
    }
}

1 个答案:

答案 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();