2016-09-23 33 views

回答

3

讓您設定的副本:

Set<Serializable> serializableSet = new HashSet<Serializable>(yourSet); 

(使用LinkedHashSet如果你需要維持秩序)。

這裏假設yourSet的元素當然實現了Serializable

+0

或者一個Guava'ImmutableSet',如果你已經在項目中使用Guava了,因爲它只是一個數組支持。 – chrylis

+0

我認爲在製作副本時毫無意義。該代碼將在類型不安全的情況下進行或不進行復制步驟。 –

+0

@MarkoTopolnik我們不知道該方法對參數做了什麼。如果它添加了元素到集合中,並且只是簡單地解決了問題,那麼您可能會在下一個集合中使用類型安全問題。 –

1

有兩個警告。但它的工作。

void anotherMethod(Set<Serializable> arg) { 
    System.out.println("called"); 
} 

public void myMethod() { 
    Set set = new HashSet<>(); // Set is a raw type. 
           // References to generic type Set<E> 
           // should be parameterized 
    anotherMethod(set); // Type safety: 
         // The expression of type Set needs unchecked 
         // conversion to conform to Set<Serializable> 
} 

如果setSet<Object>,那麼你可以調用anotherMethod((Set)set)

+0

也許你可以使用:void anotherMethod(Set <?implements Serializable> arg) – JIV

相關問題