我正在将Java7代码移植到Java8,并提出了以下问题。 在我的代码库,我有两个方法:对通用方法的Java 8调用不明确
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();
编译器返回不明的匹配误差方法在下面的测试追加:
@Test(expected = NullPointerException.class)
public void shouldAppendThrowNullPointerForNullSecondSet() {
ImmutableSet<Integer> obj = null;
CollectionUtils.append(ImmutableSet.of(1), obj);
}
编译器错误:
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
如何重写这些函数与从Java8引入的类型推断一起工作?
你可以通过让'ImmutableSet obj = null; \t \t ImmutableSet set = ImmutableSet.of(1); \t append(set,obj);'。 –
Tunaki
无法在ideone中重现(使用HashSet而不是ImmutableSet,但从类型推断的角度来看这应该不重要)http://ideone.com/oT6SbF。 –
@AndyTurner无法使用jdk 1.8.0_51(和Eclipse Mars.2)进行编译。 – Tunaki