zoukankan      html  css  js  c++  java
  • Why use interface type to declare a collectio

    The following program prints out all distinct words in its argument list. Two versions of this program are provided. The first uses JDK 8 aggregate operations. The second uses the for-each construct.

    Using JDK 8 Aggregate Operations:

    import java.util.*;
    import java.util.stream.*;

    public class FindDups {
    public static void main(String[] args) {
    Set<String> distinctWords = Arrays.asList(args).stream()
    .collect(Collectors.toSet());
    System.out.println(distinctWords.size()+
    " distinct words: " +
    distinctWords);
    }
    }
    Using the for-each Construct:

    import java.util.*;

    public class FindDups {
    public static void main(String[] args) {
    Set<String> s = new HashSet<String>();
    for (String a : args)
    s.add(a);
    System.out.println(s.size() + " distinct words: " + s);
    }
    }

    Now run either version of the program.

    java FindDups i came i saw i left
    The following output is produced:

    4 distinct words: [left, came, saw, i]
    Note that the code always refers to the Collection by its interface type (Set) rather than by its implementation type. This is a strongly recommended programming practice because it gives you the flexibility to change implementations merely by changing the constructor. If either of the variables used to store a collection or the parameters used to pass it around are declared to be of the Collection's implementation type rather than its interface type, all such variables and parameters must be changed in order to change its implementation type.

    Furthermore, there's no guarantee that the resulting program will work. If the program uses any nonstandard operations present in the original implementation type but not in the new one, the program will fail. Referring to collections only by their interface prevents you from using any nonstandard operations.

  • 相关阅读:
    隔壁小孩都要知道的Drupal配置
    Cobaltstrike、armitage联动
    YxCMS 1.4.7 最新版漏洞分析
    业务逻辑漏洞探索之暴力破解
    刺透内网的HTTP代理
    pwn入门之栈溢出练习
    史上最完整的MySQL注入
    ISG 2018 Web Writeup
    3-4 计算长方形的周长和面积
    【Lucene4.8教程之二】索引
  • 原文地址:https://www.cnblogs.com/glf2046/p/4885411.html
Copyright © 2011-2022 走看看