第26条:请不要使用原生态类型
在Java中,原生态类型是指未经参数化的泛型类型,例如List
而不是List<String>
。使用原生态类型可能导致编译时错误被延迟到运行时,因此应该尽量避免使用原生态类型。
为什么不要使用原生态类型?
使用原生态类型会导致编译器无法对类型进行检查,从而增加了出错的可能性。例如,考虑以下代码:
List list = new ArrayList();
list.add("Hello");
Integer value = (Integer) list.get(0); // 运行时抛出ClassCastException
在这个例子中,由于使用了原生态类型,编译器无法检查list
中的元素类型,导致在运行时出现类型转换异常。
如何避免使用原生态类型?
避免使用原生态类型的方法是始终使用泛型类型。例如,将上述代码改为:
List<String> list = new ArrayList<>();
list.add("Hello");
String value = list.get(0); // 不会出现类型转换异常
通过使用泛型类型,编译器可以在编译时对类型进行检查,从而避免了潜在的运行时异常。
第27条:消除非受检的警告
在Java中,编译器会发出非受检的警告(unchecked warning)来提示可能存在的类型安全问题。消除这些警告是很重要的,因为它们可能会导致运行时异常。
如何消除非受检的警告?
消除非受检的警告的方法包括使用@SuppressWarnings
注解、使用泛型类型、以及优化代码逻辑等。例如,考虑以下代码:
List list = new ArrayList();
list.add("Hello");
String value = list.get(0); // 编译时会出现非受检的警告
可以通过使用泛型类型来消除警告:
List<String> list = new ArrayList<>();
list.add("Hello");
String value = list.get(0); // 不会出现非受检的警告
为什么要消除非受检的警告?
消除非受检的警告可以提高代码的可读性和可维护性,同时避免潜在的运行时异常。因此,在编写代码时应该尽量消除非受检的警告。
第28条:列表优于数组
在Java中,列表(List)通常优于数组,因为列表具有更好的类型安全性和灵活性。
为什么列表优于数组?
列表优于数组的原因包括:
- 列表可以使用泛型类型,从而提供更好的类型安全性。
- 列表可以动态调整大小,而数组的大小是固定的。
- 列表提供了丰富的操作方法,如添加、删除、遍历等。
列表和数组的比较
考虑以下代码:
List<String> list = new ArrayList<>();
list.add("Hello");
String value = list.get(0);
String[] array = new String[1];
array[0] = "Hello";
String value = array[0];
在这个例子中,列表提供了更好的类型安全性和灵活性,因此通常情况下应该优先选择列表而不是数组。