你可以这样做:
List list = Arrays.asList(new X[desiredSize]);
// where X is any Object type (including arrays and enums,
// but excluding primitives)
参考:
或者:使用Guava,这是一个静态方法,可以装饰最大尺寸的现有列表
public static List setMaxSize(
final List input, final int maxSize){
return new ForwardingList(){
@Override
public boolean addAll(Collection extends T> collection){
return standardAddAll(collection);
}
@Override
public boolean addAll(int index, Collection extends T> elements){
return standardAddAll(index, elements);
}
public boolean add(T e) {
checkMaxSize();
return delegate().add(e);
}
@Override
public void add(final int index, final T e){
checkMaxSize();
delegate().add(index, e);
}
private void checkMaxSize(){
if(size() >= maxSize){
throw new UnsupportedOperationException("Maximum Size "
+ maxSize + " reached");
}
}
@Override
protected List delegate(){
return input;
}
};
}
由于所有标准集合类型都存在ForwardingXxx类,因此您也可以为其他集合编写类似的装饰器.
显然,如果您的客户端代码使用了装饰的集合,这将只起作用.如果您更改底层集合,那么您将被拧紧(就像Collections.unmodifiableXXX方法一样)
参考: