Przesyłam kod Java7 do Javy 8 i pojawił się następujący problem. W moim kodzie mam dwie metody:Wywołanie metody generycznej Java 8 jest niejednoznaczne.
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();
Compiler zwraca błąd o niejednoznacznej meczu dla metody Dołącz w następujący test:
@Test(expected = NullPointerException.class)
public void shouldAppendThrowNullPointerForNullSecondSet() {
ImmutableSet<Integer> obj = null;
CollectionUtils.append(ImmutableSet.of(1), obj);
}
Błąd kompilatora:
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
Jak przerobić te funkcje na pracę z wnioskiem o typ z wprowadzonego z Java8?
Możesz sprawić, by działał przez 'ImmutableSet obj = null; \t \t ImmutableSet zestaw = ImmutableSet.of (1); \t append (set, obj); '. –
Tunaki
Nie można odtworzyć w idee (używając HashSet zamiast ImmutableSet, ale to nie powinno mieć znaczenia z perspektywy inferencji typów) http://ideone.com/oT6SbF. –
@AndyTurner Nie kompiluje się z jdk 1.8.0_51 (i Eclipse Mars.2). – Tunaki