我有一个要公开的服务层方法,该方法应返回扩展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;
}

最佳答案

由于getCachedCMSObject的签名为:

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


尽管您可能想引发异常而不是返回null,但是将您的演员转换为T是不必要的。

09-26 05:45