Java 声明要生成和使用的接口对象的集合
我可以声明一个可以产生和使用的接口对象集合吗 我有一个界面:Java 声明要生成和使用的接口对象的集合,java,collections,interface,Java,Collections,Interface,我可以声明一个可以产生和使用的接口对象集合吗 我有一个界面: public interface IData { … } 以及实现它的类 public class WristMonData implements IData{ … } 我想声明一个对象列表,这些对象实现了要传递给方法的接口。我好像拿不出正确的收款申报单 IData works = new WristMonData(); List<IData> doesntWork = new ArrayList&l
public interface IData {
…
}
以及实现它的类
public class WristMonData implements IData{
…
}
我想声明一个对象列表,这些对象实现了要传递给方法的接口。我好像拿不出正确的收款申报单
IData works = new WristMonData();
List<IData> doesntWork = new ArrayList<WristMonData>(); //Incompatible types error
IData works=新腕带();
List doesnetwork=new ArrayList()//不兼容类型错误
我的理解是我不应该使用你需要声明的List
List<IData> itWorks = new ArrayList<IData>();
List itWorks=new ArrayList();
然后您可以向列表中添加类型为WristMonData
的元素您可以编写:
List<WristMonData> doesWork = new ArrayList<WristMonData>();
简单的解决方案是如此令人满意。非常感谢。您可以将WristMonData
类型的元素放入列表中,但如果没有显式转换,您将无法将它们取出。这违背了泛型的目的。@davidorenzomarino我必须等待足够的时间才能允许。谢谢。如果我这样做,问题是试图将WristMonData
对象添加到List@user432209您不需要尝试将WristMonData
添加到我要添加的列表中,也就是(List@user432209创建列表时,需要执行以下操作list list=new ArrayList()
。您可以从该列表中添加和获取WristMonData
对象,而无需强制转换。如果您需要将该列表传递给一个接受任何类型IData
列表的方法,则该方法的参数必须是ListCorrection。我仍然有点结巴。您可以为上面的方法添加list.add的语法吗?T汉克斯。
public void method(List<? extends IData> list)
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.
}