【发布时间】:2012-12-19 07:49:23
【问题描述】:
我有一组类都实现了一个验证接口,该接口具有方法isValid()。我想将一组对象(所有不同的类)放入一个 ArrayList 中,遍历它们并在每个对象上调用 isValid()。
这是我的代码
Email email = new email();
Address address = new Address();
ArrayList<? extends Validation> myValidationObjects = new ArrayList();
但是当我尝试这样做时:
myValidationObjects.add(email);
我明白了:
ArrayList 类型中的方法 add(capture#2-of ? extends Validation) 不适用于参数(电子邮件)
Email 和 Address 都实现了验证。
根据this document,我应该可以将extends 用于接口和子类。
【问题讨论】:
-
为什么不使用
ArrayList<Validation>而没有任何extends? -
? extends Validation表示Validation的一些特定但未知 子类。据编译器所知,它可能是与Email或Address完全无关的其他子类。
标签: java generics collections interface arraylist