有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java什么是“接口”以及如何针对它进行编程?

ArrayList<Class> name = new ArrayList<Class>(#)

昨天有人告诉我,这样的做法很糟糕,我应该“针对接口”编程,比如:

List<Class> name = new ArrayList<Class>(#)

他是什么意思


共 (6) 个答案

  1. # 1 楼答案

    ArrayList实现List。因此,出于一些原因,最好使用List。例如,如果您希望在将来更改列表的类型(例如,您决定使用LinkedListStackVector),则只需更改赋值的右侧,其余代码即可正常工作,保持不变

  2. # 2 楼答案

    List<Class> name = new ArrayList<Class>(#)
    SuperType   ref  =     SubTypeObj
    

    这是创建ArrayList的多态方法。List是ArrayList的超级类型。 这样创建arraylist的优点是:

    • 您可以稍后引用相同的列表来创建LinkedList

      name=新建链接列表(#)

  3. # 3 楼答案

    无需透露您使用的列表的具体实现

    唯一可用的方法是来自接口的方法。从技术上来说,这并不重要,但这是一个好习惯。代码更干净,更易于维护

  4. # 4 楼答案

    该代码段中的“接口”是ListArrayList更抽象的类

    列表将由其他一些类实现,如ArrayList、LinkedList等

    通过使用接口来声明name,那么name的用户就不必知道name实际上是哪种类型的列表,如果您决定将来使用不同类型的列表,您可以不必在代码中更改很多位置

  5. # 5 楼答案

    理想情况下,您希望使用集合的接口,而不是集合变量和返回值的实现。在你的例子中,这不是什么大问题。更有用的是在编写方法时:

    public List<String> doSomething() {
    }
    

    通过使用List<String>和不使用ArrayList<String>,这个方法可以选择一个不同的列表来使用(例如,它可能会更改为LinkedList),但是API的约定不会更改,所以所有调用代码仍然可以工作,即使该方法现在返回不同类型的列表

  6. # 6 楼答案

    In接口定义了可用的方法,所以当编写类来实现接口时,它必须在接口中定义方法。(可能还有其他方法)

    假设您编写了一个其他人将使用的类,它有一个如下方法:

    public void doSomething(List<Thing> aListOfThings) {
      //some code to manipulate the list
    }
    

    当其他人编写代码来使用你的类时,你并不关心他们使用什么类型的列表来调用你的方法。所有这些都是有效的:

    yourClass.doSomething(new ArrayList<Thing>());
    yourClass.doSomething(new AttributeList<Thing>());
    yourClass.doSomething(new Vector<Thing>());
    yourClass.doSomething(new SomeOtherTypeOfList<Thing>());
    

    他们可以自由选择任何适合自己目的的列表类型(实现)