如何分配 ArrayList>将对象键入 List>; Java中的变量

发布于 2024-11-17 06:30:17 字数 787 浏览 2 评论 0 原文

要通过合同或接口进行编程,我定义一个这样的类:

public ClsOne{
    private List<IntfA> fieldA;
    public setFieldA(List al);
}
public ClsA implements IntfA{...}

然后在其他地方,我们可以编写:

....
ArrayList<ClsA> alist = new ArrayList<ClsA>();
ClsOne one = new ClsOne();
one.setFieldA(alist); 

但是,这似乎不适用于嵌入式容器:

public ClsTwo{
    private List<List<IntfA>> fieldA;
    public setFieldA(List<List<IntfA>> al);
}
public ClsA implements IntfA{...}

因为下面的代码不正确:

ArrayList<ArrayList<ClsA>> aalist = new ArrayList<ArrayList<ClsA>>();
 ClsOne one = new ClsOne();
one.setFieldA(aalist);

那么,有什么解决方法吗在这种情况下,在 ClsA 的定义中隐藏具体容器类型吗?

to program by contract or by interface, I define a class like this:

public ClsOne{
    private List<IntfA> fieldA;
    public setFieldA(List al);
}
public ClsA implements IntfA{...}

then in somewhere else, we can write:

....
ArrayList<ClsA> alist = new ArrayList<ClsA>();
ClsOne one = new ClsOne();
one.setFieldA(alist); 

But, this seems not available for embedded containers:

public ClsTwo{
    private List<List<IntfA>> fieldA;
    public setFieldA(List<List<IntfA>> al);
}
public ClsA implements IntfA{...}

since the code below is not correct:

ArrayList<ArrayList<ClsA>> aalist = new ArrayList<ArrayList<ClsA>>();
 ClsOne one = new ClsOne();
one.setFieldA(aalist);

So, is there any work around to hide concrete container type under this circumstance in ClsA's definition?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故人如初 2024-11-24 06:30:17

您可以实例化一个包含 List 类型对象的 ArrayList

ArrayList<List<ClsA>> aalist = new ArrayList<List<ClsA>>();
ClsOne one = new ClsOne();
one.setFieldA(aalist);

You can instantiate an ArrayList which contains objects of type List<ClsA>:

ArrayList<List<ClsA>> aalist = new ArrayList<List<ClsA>>();
ClsOne one = new ClsOne();
one.setFieldA(aalist);
没︽人懂的悲伤 2024-11-24 06:30:17
public setFieldA(List<? extends List<? extends IntfA>> al);

应该有效。 Java 泛型是草率且令人困惑的,并且没有多大意义。

如果您需要解释,请阅读此处。我宁愿使用更好的语言。

public setFieldA(List<? extends List<? extends IntfA>> al);

Should work. Java generics are sloppy and confusing and don't make a whole lot of sense.

Read here if you want an explanation. I'd rather just use a better language.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文