Java 确定泛型类型

Java 确定泛型类型,java,android,generics,Java,Android,Generics,我正在编写一个通用缓存,目前可以保存位图和字符串,以便在不同的加载程序中使用它 public class Cache<T> {} 我现在就是这样做的。我想知道这是否正确,是否有更好的方法,如多态类型确定这样做 ---编辑--------------------------------------- 我找到了另一种方法,它声明了getItemSize抽象。因此,每个加载程序都可以使用所需的getItemSize从基本缓存扩展自己的缓存 class BitmapCache extend

我正在编写一个通用缓存,目前可以保存位图和字符串,以便在不同的加载程序中使用它

public class Cache<T> {}
我现在就是这样做的。我想知道这是否正确,是否有更好的方法,如多态类型确定这样做

---编辑---------------------------------------

我找到了另一种方法,它声明了getItemSize抽象。因此,每个加载程序都可以使用所需的getItemSize从基本缓存扩展自己的缓存

class BitmapCache extends Cache<Bitmap>
{
    @Override
    public long getSize(Bitmap bitmap)
    {
        if (bitmap == null) return 0;
        return bitmap.getRowBytes() * bitmap.getHeight();
    }
}
类BitmapCache扩展缓存
{
@凌驾
公共长getSize(位图)
{
如果(位图==null)返回0;
返回bitmap.getRowBytes()*bitmap.getHeight();
}
}

如果您计划实现更多的类,而不是反复检查
实例的
,那么您应该使用具有
getSize()
方法的包装类,或者它的相似性

public interface DataWrapper {

    public long getSize();

}

//...

private <T extends DataWrapper> long getSize(T t) {
    return t.getSize();
}

// or even just
yourGeneric.getSize();
公共接口数据包装器{
公共长getSize();
}
//...
专用长getSize(T){
返回t.getSize();
}
//甚至只是
yourGeneric.getSize();

如果您计划实现更多的类,而不是反复检查
实例的
,那么您应该使用具有
getSize()
方法的包装类,或者它的相似性

public interface DataWrapper {

    public long getSize();

}

//...

private <T extends DataWrapper> long getSize(T t) {
    return t.getSize();
}

// or even just
yourGeneric.getSize();
公共接口数据包装器{
公共长getSize();
}
//...
专用长getSize(T){
返回t.getSize();
}
//甚至只是
yourGeneric.getSize();

如果您计划实现更多的类,而不是反复检查
实例的
,那么您应该使用具有
getSize()
方法的包装类,或者它的相似性

public interface DataWrapper {

    public long getSize();

}

//...

private <T extends DataWrapper> long getSize(T t) {
    return t.getSize();
}

// or even just
yourGeneric.getSize();
公共接口数据包装器{
公共长getSize();
}
//...
专用长getSize(T){
返回t.getSize();
}
//甚至只是
yourGeneric.getSize();

如果您计划实现更多的类,而不是反复检查
实例的
,那么您应该使用具有
getSize()
方法的包装类,或者它的相似性

public interface DataWrapper {

    public long getSize();

}

//...

private <T extends DataWrapper> long getSize(T t) {
    return t.getSize();
}

// or even just
yourGeneric.getSize();
公共接口数据包装器{
公共长getSize();
}
//...
专用长getSize(T){
返回t.getSize();
}
//甚至只是
yourGeneric.getSize();

从字符串中获取字节时,请考虑编码。不同的编码会给你不同的长度。您应该明确地指出这一点。@RohitJain这不返回实际的内存大小吗?我想要字符串的内存大小。在从字符串中获取字节的同时考虑编码。不同的编码会给你不同的长度。您应该明确地指出这一点。@RohitJain这不返回实际的内存大小吗?我想要字符串的内存大小。在从字符串中获取字节的同时考虑编码。不同的编码会给你不同的长度。您应该明确地指出这一点。@RohitJain这不返回实际的内存大小吗?我想要字符串的内存大小。在从字符串中获取字节的同时考虑编码。不同的编码会给你不同的长度。您应该明确地指出这一点。@RohitJain这不返回实际的内存大小吗?我想要字符串的内存大小。实际上,@Rogue的答案更好。如果将类定义为
public class Cache
,则不需要为每个可能的类扩展
getSize
。相反,它可以像上面罗格所写的那样保持一行。@Ali,我完全同意罗格的观点。这就是我要回答的。事实上,@Rogue的回答更好。如果将类定义为
public class Cache
,则不需要为每个可能的类扩展
getSize
。相反,它可以像上面罗格所写的那样保持一行。@Ali,我完全同意罗格的观点。这就是我要回答的。事实上,@Rogue的回答更好。如果将类定义为
public class Cache
,则不需要为每个可能的类扩展
getSize
。相反,它可以像上面罗格所写的那样保持一行。@Ali,我完全同意罗格的观点。这就是我要回答的。事实上,@Rogue的回答更好。如果将类定义为
public class Cache
,则不需要为每个可能的类扩展
getSize
。相反,它可以像上面罗格所写的那样保持一行。@Ali,我完全同意罗格的观点。这就是我要回答的。