java – 是否存在“Down casting”Collection <?将T>扩展到Collection是有道理的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 是否存在“Down casting”Collection <?将T>扩展到Collection是有道理的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3034字,纯文字阅读大概需要5分钟。
内容图文
![java – 是否存在“Down casting”Collection <?将T>扩展到Collection是有道理的](/upload/InfoBanner/zyjiaocheng/772/41de8b458b1b4d0ca0c11e30065b22ff.jpg)
stackoverflow问题:Is List
基于https://stackoverflow.com/a/27491199/4350148的答案,我已将DownCastCollection更改为可修改,因此现在它不会返回错误.这个问题仍然有效.
这是downcast集合类:
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class DownCastCollection<E> extends AbstractCollection<E> implements Collection<E> {
@SuppressWarnings("rawtypes")
private Collection delegate;
public DownCastCollection(Collection<? extends E> delegate) {
if(delegate == null) throw new IllegalArgumentException();
this.delegate = delegate;
}
@Override
public int size() {
return delegate.size();
}
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
@Override
public boolean contains(Object o) {
return delegate.contains(o);
}
private class MyIterator implements Iterator<E>{
@SuppressWarnings("rawtypes")
Iterator delegateIterator;
protected MyIterator() {
super();
this.delegateIterator = delegate.iterator();
}
@Override
public boolean hasNext() {
return delegateIterator.hasNext();
}
@SuppressWarnings("unchecked")
@Override
public E next() {
return (E)delegateIterator.next();
}
@Override
public void remove() {
delegateIterator.remove();
}
}
@Override
public Iterator<E> iterator() {
return new MyIterator();
}
@SuppressWarnings("unchecked")
@Override
public boolean add(E e) {
return delegate.add(e);
}
@Override
public boolean remove(Object o) {
return delegate.remove(o);
}
@SuppressWarnings("unchecked")
@Override
public boolean containsAll(Collection<?> c) {
return delegate.containsAll(c);
}
@SuppressWarnings("unchecked")
@Override
public boolean addAll(Collection<? extends E> c) {
return delegate.addAll(c);
}
@SuppressWarnings("unchecked")
@Override
public boolean removeAll(Collection<?> c) {
return delegate.removeAll(c);
}
@SuppressWarnings("unchecked")
@Override
public boolean retainAll(Collection<?> c) {
return delegate.retainAll(c);
}
@Override
public void clear() {
if(delegate == null) return;
delegate.clear();
}
解决方法:
Collections.unmodifiableCollection及其朋友是查看集合的内置方法<?延伸T>作为集合< T>.它们确切地解决了您已正确识别的问题,可以将元素添加到集合< T>无法添加到集合<?通过禁止添加或任何类型的修改来扩展T>. 此问题的其他解决方案包括不依赖于基础对象的实现细节,禁止添加但不删除或进行复制. 最后,对于它的价值而言,您的解决方案与简单地投射您的集合(Collection< E>)(Collection)集合完全是类型安全的,但效率较低,该集合利用擦除来简单地(并且不安全地)投射支持采集.
内容总结
以上是互联网集市为您收集整理的java – 是否存在“Down casting”Collection <?将T>扩展到Collection是有道理的全部内容,希望文章能够帮你解决java – 是否存在“Down casting”Collection <?将T>扩展到Collection是有道理的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。