在执行提取表达式重构时,我偶然发现了Eclipse 4.4和Java 8 build 45中的一些奇怪的行为.以下示例显示了应用提取重构之前的原始和无错代码:
import java.util.Map;
import java.util.Set;
public class MyMap<K, V> {
public void putAll(final Map<? extends K, ? extends V> mapToCopy) {
for (Map.Entry<? extends K, ? extends V> entry : mapToCopy.entrySet()) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse重构的结果如下所示,并导致下面的错误消息引用entrySet循环声明中的读取访问:
public void putAll(final Map<? extends K, ? extends V> mapToCopy) {
Set<?> entrySet = mapToCopy.entrySet();
for (Map.Entry<? extends K, ? extends V> entry : entrySet) {
^^^^^^^^
}
}
Type mismatch: cannot convert
from element type capture#3-of ? …Run Code Online (Sandbox Code Playgroud)