为什么我会收到类型不匹配错误?

Nic*_*cky 1 java generics

我一直试图使用泛型返回一个地图:

import java.util.HashMap;
import java.util.Map;
public class GenericTest {

    public <T extends Vehicle> Map<String, T> get() {
        Map<String, Car> map = new HashMap<>();
        return map; // Getting error 
    }

}    
class Vehicle {
}    
class Car extends Vehicle {
}
Run Code Online (Sandbox Code Playgroud)

在线,我返回地图,我收到错误

Type mismatch: cannot convert from Map<String,Car> to Map<String,T>
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么吗?

在返回类型中我提到过T扩展了Vehicle.

And*_*ner 6

因为你可以打电话Map<String, Truck> map = new GenericTest().get();.而a Map<String, Car>不是Map<String, Truck>.

将变量声明更改为:

Map<String, T> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

或将方法签名更改为:

public Map<String, Car> get()
Run Code Online (Sandbox Code Playgroud)