pea*_*oup 3 java oop generics interface class
我看到这个语法很多,并且不理解它背后的原因.我认为您通常希望使用类而不是接口来更轻松地执行您可能想要执行的全部操作.
为什么这样:
List<Foo> foo = new ArrayList<Foo>(something.getFoo());
Run Code Online (Sandbox Code Playgroud)
而不是这个:
ArrayList<Foo> foo = new ArrayList<Foo>(something.getFoo());
Run Code Online (Sandbox Code Playgroud)
当你以后想要对foo执行操作时?如果foo由类ArrayList而不是接口List表示,这不是更容易吗?
Jon*_*eet 12
偶尔,是的.如果你确实需要一个声明ArrayList<T>但List<T>不确定的方法,那就去吧.
但是,反过来更灵活 - 如果您不需要声明任何方法ArrayList<T>,那么您的代码可以通过将变量声明为类型List<T>来表示.这就是说,"我只需要一个清单.我恰好在挑选ArrayList<T>,但仅仅因为它的行为适合我......不是因为我需要它暴露的任何额外功能."
例如,知道以后是否有人想知道他们是否可以替换不同的实现,这很有用.它还限制了读者必须考虑多少......变量的类型越普遍,用它做的就越少 - 所以需要考虑的就越少.
例如,如果我看到一个类型的变量Iterable<T>我知道稍后可能会用它做的很少:基本上,它将用于迭代,而这就是全部.我不需要担心以后的代码是否会尝试向集合添加值,或者通过索引等访问它.
这对于局部变量来说相对不重要,但对于实例变量尤其是参数更是如此:参数越不具体,调用者就它们将传递哪些参数的灵活性就越大.