Java 从超类到泛型T的未检查强制转换

Java 从超类到泛型T的未检查强制转换,java,android,design-patterns,casting,Java,Android,Design Patterns,Casting,最近开始为android编程,我遇到了我的部分代码,我想知道是否可以用更好的方式设计。我有一个SparseArray包含表示resourceId的Int到名为Resource的抽象类的映射。当我想检索我的资源,因为多个类继承自这个类时,我的问题就出现了。对于这个解决方案,有没有比我目前尝试将资源对象强制转换为泛型T更好的设计。这确实不是任何类都可以使用的安全性,不仅仅是资源固有的类 public <T> T getAsset(int resourceId) { try

最近开始为android编程,我遇到了我的部分代码,我想知道是否可以用更好的方式设计。我有一个
SparseArray
包含表示resourceId的Int到名为
Resource
的抽象类的映射。当我想检索我的资源,因为多个类继承自这个类时,我的问题就出现了。对于这个解决方案,有没有比我目前尝试将资源对象强制转换为泛型T更好的设计。这确实不是任何类都可以使用的安全性,不仅仅是资源固有的类

public <T> T getAsset(int resourceId)
{
    try
    {
        T ReturnAsset = (T)resources.get(resourceId);
        return ReturnAsset;
    }
    catch(ClassCastException cce)
    {
        Log.w("Resource", "Invalid cast of asset "+cce.toString());
        return null;
    }
}
public T getAsset(int-resourceId)
{
尝试
{
T ReturnAsset=(T)resources.get(resourceId);
归还资产;
}
捕获(ClassCastException cce)
{
Log.w(“资源”,“资产的无效转换”+cce.toString());
返回null;
}
}
您可以这样做

public <T extends Resource> T getAsset(int resourceId)
{
    try
    {
        T ReturnAsset = (T)resources.get(resourceId);
        return ReturnAsset;
    }
    catch(ClassCastException cce)
    {
        Log.w("Resource", "Invalid cast of asset "+cce.toString());
        return null;
    }
}
public T getAsset(int-resourceId)
{
尝试
{
T ReturnAsset=(T)resources.get(resourceId);
归还资产;
}
捕获(ClassCastException cce)
{
Log.w(“资源”,“资产的无效转换”+cce.toString());
返回null;
}
}