鉴于此代码:
public final class MyMap extends HashMap<MyClass<? extends MyInterface>, MyInterface>
{
public <T extends MyInterface> T put(MyClass<T> key, T value)
{
return (T)key.getClass().getComponentType().cast(super.put(key, value));
}
}
我从MyInterface到T获得了一个未经检查的强制转换警告。
我真的不喜欢它,所以我使用Class.cast()方法来代替它。 现在我的新功能看起来像这样:
public final class MyMap extends HashMap<MyClass<? extends MyInterface>, MyInterface>
{
public <T extends MyInterface> T put(MyClass<T> key, T value)
{
Class<T> cl = (Class<T>)key.getClass().getComponentType();
return cl.cast(super.put(key, value));
}
}
但是这个给出了来自Class&lt;?&gt;的未经检查的强制警告。类&lt; T&gt; as Object.getClass()返回通配符类。
但是,key.getClass()。getComponentType()是否有可能不返回Class&lt; T&gt;因为T是由密钥类的组件类型定义的吗?