有 Java 编程相关的问题?

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


共 (4) 个答案

  1. # 1 楼答案

    Programming to an interface, not an implementation

    这是“四人帮”(GoF)的一个节目。 为什么

    你用抽象的契约来指导,而不是具体的实施

    public class MyClass {
    
        private List myList ;
    
        public setMyList(List list){
            myList=list;
        }
    
    }
    

    你想要LinkedList实现,而不是ArrayList实现,怎么样? 这样,只需将该属性注入setter即可

    抽象是关键,你对实现一无所知,只知道规范的指导

    读这个What does it mean programming to an interface?

  2. # 2 楼答案

    这样的代码不使用List类,而是将变量声明为List类型。这叫做abstraction

    List是一个接口,它定义了实际类有哪些方法,而不指定使用了哪个实际类

    虽然这不是什么大事,但这种做法可能非常重要,在更复杂的情况下甚至是必不可少的。始终遵循这种模式是很好的做法

  3. # 3 楼答案

    List<String> names = new ArrayList<String>();
    

    这样,您就可以针对接口List编写代码,这使得将来在必要时切换实现变得很容易

    在这种情况下,以下内容就足够了:

    List<String> names = new //some other implementation of List
    

    现在,如果你做以下事情-

    ArrayList<String> names = new ArrayList<String>();
    

    您将针对实现ArrayList本身进行编码。您的代码与特定的实现相关联。如果必须切换实现,则需要大量代码更改

    查看docs以了解Java 6提供的一些标准实现

  4. # 4 楼答案

    将代码与接口的特定实现分离

    这也有助于您将来转移到List接口的另一个实现

    例如:

    你有List<String> names = new ArrayList<String>();后来你决定你应该使用List接口的其他实现,比如LinkedList,所以你只需要把它改成List<String> names = new LinkedList<String>();,什么都不会坏