在转换器列表中使用有界通配符(?扩展)会产生类型不匹配错误

时间:2019-03-18 20:54:55

标签: java generics inheritance bounded-wildcard

我有以下课程:

import com.google.common.base.Converter;

public class CustomConverter extends Converter<MyClass, String> {

    // Implemented overrides are here and working
}

public class BaseModule {
}

public class MyClass extends BaseModule {
}

我想拥有以下Map

Map<EnumIdentifier, Converter<? extends BaseModule, String>> moduleToConverter;

然后在我的代码中,我尝试执行以下操作:

import lombok.val;

// ...

public static void main (String[] args)
{
    moduleToConverter = new HashMap<>();
    moduleToConverter.put(EnumIdentifier.MyClass, new CustomConverter());

    List<BaseModule> itemsToConvert = new ArrayList<>();
    itemsToConvert.add(new MyClass());

    for (BaseModule item : itemsToConvert) {
        val converter = moduleToConverter.get(EnumIdentifier.MyClass);
        val convertedData = converter.convert(item); // ERROR HERE
    }
}

这在IntelliJ中给出了以下错误

  

转换   无法将Converter中的(capture <?extended BaseModule>)应用于(BaseModule)

有没有办法使这个想法生效?如果不是,为什么不呢?

0 个答案:

没有答案