Tôi đang chuyển mã Java7 sang Java8 và tôi đã đưa ra một vấn đề sau. Trong codebase của tôi, tôi có hai phương pháp:Gọi Java 8 đến phương pháp chung là mơ hồ
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 trả về lỗi về trận đấu mơ hồ đối với phương pháp thêm trong thử nghiệm sau đây:
@Test(expected = NullPointerException.class)
public void shouldAppendThrowNullPointerForNullSecondSet() {
ImmutableSet<Integer> obj = null;
CollectionUtils.append(ImmutableSet.of(1), obj);
}
biên dịch báo lỗi:
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
Làm thế nào để viết lại các hàm này để làm việc với suy luận kiểu từ được giới thiệu với Java8?
Bạn có thể làm cho nó hoạt động bằng cách có 'ImmutableSet obj = null; \t \t ImmutableSet set = ImmutableSet.of (1); \t nối thêm (set, obj); '. –
Tunaki
Không thể sao chép trong ideone (bằng cách sử dụng HashSet thay vì ImmutableSet, nhưng điều đó không quan trọng từ phối cảnh suy luận kiểu) http://ideone.com/oT6SbF. –
@AndyTurner Không biên dịch được với jdk 1.8.0_51 (và Eclipse Mars.2). – Tunaki