小编Mar*_*cus的帖子

使用泛型返回类型提取表达式后键入不匹配

在执行提取表达式重构时,我偶然发现了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)

java generics refactoring types capture

5
推荐指数
1
解决办法
132
查看次数

标签 统计

capture ×1

generics ×1

java ×1

refactoring ×1

types ×1