我有一个带有返回有界通配符的方法的接口:
public Collection<? extends CacheableObject> retrieveConnections(CacheableObject element);
该接口由返回
PersistentAbstraction
的类名称CacheableObject
实现:public Collection<? extends CacheableObject> retrieveConnections(CacheableObject element) {
Collection<CacheableObject> connections = new HashSet<CacheableObject>();
for(CacheableRelation relation : connectedElements) {
if(relation.contains(element)) {
connections.add(relation.getRelatedElement(element));
}
}
return connections;
}
现在,我有一个称为
CacheableObject
的User
实现和一个具有PersistentAbstraction
实例的类。我正在尝试执行以下操作:public Collection<User> retrieveConnections(User user) {
Collection<User> collection = (Collection<User>) persistentAbstraction.retrieveConnections(user);
return collection;
}
但它说:
Type safety: Unchecked cast from Collection<capture#1-of ? extends CacheableObject> to Collection<User>
我不确定该警告背后的原因是什么。用户不是CacheableObject吗?警告是什么意思?
最佳答案
retrieveConnections
返回Collection<? extends CacheableObject>
。这可能是Collection<User>
,但编译器无法知道,因为它可能是Collection<OtherClass>
,其中OtherClass
是实现CacheableObject
的其他类。
有几种方法可以解决此问题。一种方法是使retrieveConnections
具有签名的通用方法
public <T extends CacheableObject> Collection<T> retrieveConnections(T element)
(您将需要相应地修改方法的主体)。这样,
persistentAbstraction.retrieveConnections(user)
的类型将为Collection<User>
,并且不需要强制转换。