Sto eseguendo il porting del codice Java7 su Java8 e ho trovato il seguente problema. Nella mia base di codice ho due metodi:La chiamata Java 8 al metodo generico è ambigua
public static <T> ImmutableSet<T> append(Set<T> set, T elem) {
return ImmutableSet.<T>builder().addAll(set).add(elem).build();
}
public static <T> ImmutableSet<T> append(Set<T> set, Set<T> elemSet) {
ImmutableSet.Builder<T> newSet = ImmutableSet.builder();
return newSet.addAll(set).addAll(elemSet).build();
compilatore restituisce l'errore su Match ambiguo per il metodo aggiungono delle nel seguente test:
@Test(expected = NullPointerException.class)
public void shouldAppendThrowNullPointerForNullSecondSet() {
ImmutableSet<Integer> obj = null;
CollectionUtils.append(ImmutableSet.of(1), obj);
}
Errore del compilatore:
reference to append is ambiguous both method append(java.util.Set,T) in CollectionUtils and method append(java.util.Set,java.util.Set) in CollectionUtils match
Come fare per riscrivere queste funzioni per lavorare con l'inferenza di tipo dall'introduzione con Java8?
È possibile farlo funzionare con 'ImmutableSet obj = null; \t \t ImmutableSet set = ImmutableSet.of (1); \t append (set, obj); '. –
Tunaki
Impossibile riprodurre in ideone (utilizzando HashSet anziché ImmutableSet, ma ciò non dovrebbe importare da una prospettiva di inferenza di tipo) http://ideone.com/oT6SbF. –
@AndyTurner Non riesce a compilare con jdk 1.8.0_51 (ed Eclipse Mars.2). – Tunaki