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,我完全同意罗格的观点。这就是我要回答的。