集合那点事

  写这篇文章之前一直在考虑分类,是感想还是技术,最终还是技术好了,因为要对得起这个标题,今天主要讲一下泛型在集合中的应用。

  平时我们在做Java的一些操作,其实大多数都是和集合有关的,前端——应用程序——数据库,我们程序员要做的应用程序的编写,对数据库数据进行业务查询或业务组装,在应用层操作集合是避免不了的,我们在操作集合时,例如List<> strings = new ArrayList<>(),其中有一个泛型“<> ”这样的符号,有些时候我们不确定是什么类型的时候我们会空着,接着不想看见黄色的警告还会来一个@SuppressWarnings("XXX")这样的注解,这样就搞定了,其实这样是不规范的,泛型如果我们不确定我们可以写成这样List<?> list,List<? extends T>等,这样对于调用者就是十分明了。

  对于list中的泛型可以分为两大类,类型通配符和泛型表示法,直接上代码:

public static void main(String[] args) {
  List<String> strings = new ArrayList<String>();
    strings.add("1");
    strings.add("2");
    strings.add("3");
    strings.add("4");
    strings.add("5");
    // show(strings)
    // show1(strings);
    String[] strings2 = { "q", "w", "e" };
    show2(strings2, strings);

}

static void show(List<?> list) {
  if (list != null && list.size() > 0) {
    for (Object object : list) {
      System.out.println(object);
    }
  }
}

 

static void show1(List<? extends Object> list) {
  if (list != null && list.size() > 0) {
    for (Object object : list) {
      System.out.println(object);
    }
  }
}

 

@SuppressWarnings("hiding")
static <T> void show2(T[] t, List<T> list) {

   if (t != null & t.length > 0) {
    for (int i = 0; i < t.length; i++) {
      list.add(t[i]);
    }
  }
  System.out.println(list);
}

   第一个方法(show())和第二个方法(show1())采用的是类型通配符法表示,在开发过程中一些类型不明确或是要写一些公共的方法时,将会是一个很不错的选择,第二个采用的是设定类型形参上限,有上限就有下限,只需要将extends改为supper即可,第三个方法(show2())采用的是泛型表示法,和类型通配符法是一样的,并且还可以混合写:

@SuppressWarnings("hiding")
static <T>void show1(List<? extends Object> list) {
  if (list != null && list.size() > 0) {
    for (Object object : list) {
      System.out.println(object);
    }
  }
}

  最终对于这两种怎么使用,个人建议:通配符目的是为了支持子类的灵活话的,而泛型方法被用来表示方法的一个或多个参数之间的类型的依赖关系,或者方法返回值与参数之间的类型依赖关系,如果没有依赖关系,就尽量不适用不使用泛型方法。

posted @ 2019-10-22 21:37  Hallowmas  阅读(111)  评论(0编辑  收藏  举报