1

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

1 に答える 1

1

の署名getCachedCMSObjectは次のとおりです。

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

Tnullを返すのではなく、例外をスローしたい場合でも、キャストは不要です。

于 2012-07-12T15:46:42.237 に答える