2016-03-09 71 views
1

我的query方法使用org.hibernate.Session便於查詢我的持久層。下面是該方法的代碼:@SafeVarargs使用通用返回類型的可變參數法

它提出了以下警告:

類型的安全性:通過潛在的堆污染VARARGS參數exampleEntities

是否可以安全使用@SafeVarargs註解在這種情況下?

據我所知,只要我沒有初始化本地Object[]exampleEntities,那麼我沒事。但這看起來不正確。

此方法類似於the Java Specification §9.6.3.7提到的方法java.util.Collections.addAll,其被註解爲@SafeVarargsThis answer討論了警告,他說,一般下面的代碼是安全的:

@SafeVarargs 
void foo(T... args) { 
    for (T x : args) { 
     // do stuff with x 
    } 
} 

但我query方法的形式爲:

<T> List<T> query(T... args) { 
    Foo foo = new Foo(); 
    for (T x : args) { 
     foo.add(x); 
    } 
    return (List<T>) foo.list(); 
} 

那麼,有沒有的情況下@SafeVarargs註釋會不安全?

回答

0

是的,你可以使用@SafeVarargs。是否可以使用@SafeVarargs取決於您如何使用可變參數參數exampleEntities。如果您依賴其實際運行時類型爲E[],那麼您不能使用@SafeVarargs,但如果僅依賴其元素的類型爲E,則可以使用@SafeVarargs

在這裏,您只遍歷exampleEntities並從中獲得E。這與@SafeVarargs一致。