为什么我的通用方法需要演员?

时间:2012-07-12 15:42:25

标签: java

我有一个我要公开的服务层方法应该返回扩展CMSContent的对象的实例(例如,交货时间,价格)。但是,在方法 getCMSContent 中,编译器坚持要对 T 进行强制转换。这个演员阵容是否可以接受,或者我是否打败了仿制品的目的?

我使用“-Xlint:unchecked”进行编译,并且没有收到任何警告,并且它按照我的预期运行。

    public <T extends CMSContent> T getCMSContent(String cmsKey, Class<T> clazz) {
        T cmsInstance = (T) CMSObjectCache.getCachedCMSObject(cmsKey, clazz);
        return cmsInstance;
    }

这是getCachedCMSObject的整个方法

public static <T> T getCachedCMSObject(String objectKey, Class<T> cls) {
    init();
    CMSObject cmsObject = cmsObjectCache.get(objectKey);
    if (cmsObject != null) {
        return cmsObject.getCMSObject(cls);
    }
    return null;
}

1 个答案:

答案 0 :(得分:1)

由于getCachedCMSObject的签名是:

T getCachedCMSObject(String cmsKey, Class<T> clazz)

你的演员阵容是T是不必要的,尽管你可能想抛出异常而不是返回null。