未选中从超类转换为通用T

时间:2013-08-30 13:01:45

标签: java android design-patterns casting

最近开始为Android编程,我遇到了我的代码的一部分,我想知道是否可以更好的方式设计。我有一个SparseArray包含表示resourceId的Int的映射到名为Resource的抽象类。当我想要从这个类继承多个类时,我想要检索我的资源时出现了我的问题。这个解决方案是否有比我目前试图将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;
    }
}

1 个答案:

答案 0 :(得分:0)

你可以这样做,

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