加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 当它由类ArrayList而不是接口List表示时,使用foo是否更

发布时间:2020-12-15 04:52:58 所属栏目:Java 来源:网络整理
导读:我看到这个语法很多,并且不理解它背后的原因.我认为您通常希望使用类而不是接口来更轻松地执行您可能想要执行的全部操作. 为什么这样: ListFoo foo = new ArrayListFoo(something.getFoo()); 而不是这个: ArrayListFoo foo = new ArrayListFoo(something.g
我看到这个语法很多,并且不理解它背后的原因.我认为您通常希望使用类而不是接口来更轻松地执行您可能想要执行的全部操作.

为什么这样:

List<Foo> foo = new ArrayList<Foo>(something.getFoo());

而不是这个:

ArrayList<Foo> foo = new ArrayList<Foo>(something.getFoo());

当你以后想要对foo执行操作时?如果foo由类ArrayList而不是接口List表示,这不是更容易吗?

解决方法

偶尔,是的.如果你确实需要一个在ArrayList< T>中声明的方法但不在List< T>中那么肯定,去吧.

但是,反过来更灵活 – 如果您不需要在ArrayList< T>中声明的任何方法,那么您的代码可以通过将变量声明为List< T>类型来表示.代替.这就是说,“我只需要一个列表.我碰巧选择了ArrayList< T>,但仅仅因为它的行为适合我……不是因为我需要它暴露的任何额外功能.”

例如,知道以后是否有人想知道他们是否可以替换不同的实现,这很有用.它还限制了读者必须考虑多少……变量的类型越普遍,用它做的就越少 – 所以需要考虑的就越少.

例如,如果我看到类型为Iterable< T>的变量.我知道以后很可能会用它来做很少的事情:基本上,它会被用来迭代,而这就是全部.我不需要担心以后的代码是否会尝试向集合添加值,或者通过索引等访问它.

这对于局部变量来说相对不重要,但对于实例变量尤其是参数更是如此:参数越不具体,调用者就它们将传递哪些参数的灵活性就越大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读