声明要生成和使用的接口对象的集合

时间:2015-11-13 14:34:22

标签: java collections interface

我可以声明一个可以生成和使用的接口对象集合吗?

我有一个界面:

public interface IData {
    … 
}

一个实现它的类

public class WristMonData implements IData{
    …
}

我想声明一个实现该接口的对象列表以传递给方法。我似乎无法使收集声明正确。

IData works = new WristMonData();
List<IData> doesntWork = new ArrayList<WristMonData>(); //Incompatible types error

我的理解是我不应该使用List<? extends IData>List<? super IData>,因为我需要生成和使用列表。

2 个答案:

答案 0 :(得分:1)

您需要声明

List<IData> itWorks = new ArrayList<IData>(); 

然后,您可以将类型WristMonData的元素添加到列表

答案 1 :(得分:1)

你可以写:

List<WristMonData> doesWork = new ArrayList<WristMonData>();

这可以传递给带签名的方法:

public void method(List<? extends IData> list)

如果使用? extends,则无法将非null元素添加到方法正文中的列表中。一个好的解决方法是使用私有通用辅助方法。

public void method(List<? extends IData> list) {
    helper(list);
}

private <T extends IData> void helper(List<T> list) {
    // You can use list as both a consumer and supplier of Ts here.
}