Effictive Java

来源:互联网 发布:python opencv教程 编辑:程序博客网 时间:2024/06/03 18:03

知识点:

1.请不要在新代码中使用原生态类型。

2.消除非受检警告。

3.列表优先于数组。

4.优先考虑泛型,优先考虑泛型方法


1.请不要在新代码中使用原生态类型。

Java.1.5版本以后就增加了泛型。为什么不要使用原生态类型:

a.泛型提供了安全性和表述性方面的优势,看下面代码,从代码我们就可以知道这个是String的List,并且如果你向里面保存其它的类型,编译直接会不通过,如果使用原生态类型,需要到运行的时候才会报错,非常不安全。

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

b.原生态类型可以使用,只是为了保证以前的非泛型代码可以正常的使用。称为移植兼容性。


2.消除非受检警告。

下面关于非受检警告说几点:

a. 我们在使用泛型过程中,需要尽量消除所有的非受检警告。这样可以确保代码是类型安全的。

b. 如果无法消除警告,但是你知道这里一定是类型安全的,我们可以用@SuppressWarnings("unchecked")注解来禁止这条警告。

c. 注解消除警告的级别一定要是最小的。并且要写下原因。不要直接消除整个类的警告。


3.列表优先于数组。

在使用泛型的时候,要用列表来代替数组,我们看一下原因:

a. 数组只有在运行的时候才会做类型检查,看下面代码,在编译的时候不会报错,运行的时候出错。泛型在编译期间就要保证类型的安全性。所有泛型数组是不允许创建的。泛型和数组在类型检查上矛盾。

Object[] array = new Long[1];array[0] = "test"; 报错

4.优先考虑泛型,优先考虑泛型方法。

我们在写代码的时候,如果想要支持多种类型,优先考虑使用泛型。这样代码更灵活,类型安全性也更强。关于泛型类,泛型方法的写法,可以参考前一节的泛型基础。看一个例子,下面的泛型方法可以支持多种类型的集合合并。

public static <E> Set<E> union(Set<E> s1, Set<E> s2) {    Set<E> result = new HashSet<E>(s1);    result.allAll(s2);    result result;}



原创粉丝点击