强制调用父类中的特定构造函数

时间:2013-04-22 13:10:35

标签: java inheritance constructor overloading

我第一次遇到以下情况:

我有following java class

public class Values extends ArrayList<Object>{
    public Values() {

    }

    public Values(Object... vals) {
        super(vals.length);
        for(Object o: vals) {
            add(o);
        }
    }
}

我想致电following parent's constructor

public ArrayList(int initialCapacity) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    this.elementData = new Object[initialCapacity];
}

这可能吗?我正在发送一个int,但它被Values的构造函数捕获。

修改

我最终想做的是:

Map<String,Object> document = getDocument();
List<String> indexFields = getIndexFields();
Values values = new Values(indexFields.size());
for (String field : indexFields) {
    values.add(document.get(field));
}

1 个答案:

答案 0 :(得分:1)

如果您要致电new Values(initialCapacity),其中initialCapacityint,那么您应该在Values类中拥有这样的构造函数:

public Values(int initialCapacity) {
    super(initialCapacity);
}

请注意,扩展集合类通常不是一个好主意。使用它们(委托,组合)而不是扩展它们。