PMD将报告违规行为:
ArrayList<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
违规是"避免使用像'ArrayList'这样的实现类型;而是使用接口".
以下行将更正违规行为:
List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
为什么要使用后者List而不是ArrayList?
好的,所以我知道Set,List并且Map是接口,但是什么使得第一行代码比第二行更好?
List myArr = new ArrayList();
ArrayList myArr = new ArrayList();
Run Code Online (Sandbox Code Playgroud) 我研究了多态,并了解它可以像下面那样进行动态方法绑定.
假设类Animal是抽象类.
public class AnimalReference
{
public static void main(String args[])
Animal ref // set up var for an Animal
Cow aCow = new Cow("Bossy"); // makes specific objects
Dog aDog = new Dog("Rover");
// now reference each as an Animal
ref = aCow; ref.speak();
ref = aDog; ref.speak();
}
Run Code Online (Sandbox Code Playgroud)
我曾经创建过ArrayList的实例,如:
ArrayList myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
但通常我认为人们写道:
Collection myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
所以我的困惑是宣称收藏的好处是什么?另外我不知道你可以在"myList"前面有"Collection"(这是一个非抽象类的接口).
为什么说这不是好习惯:
ArrayList myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
我阅读了Collection接口和ArrayList Java文档以及在线教程,但仍然不太清楚..有人能给我一些解释吗?