The advantages of using generics means that the compiler checks that only strings are added to the list which makes the code safer.
List names = new ArrayList();
names.add("Bill");
String name = (String)names.get(0);
System.out.println("First name:" + name);
List<String> names2 = new ArrayList();
names2.add("Bill");
String name2 = names2.get(0);
System.out.println("First name:" + name2);
Further advantage comes when access more elements in the list, without generics, every single object need to cast to a string. With generics, only need to specify the type once when create the list.
In Java, object is a parent type of all other object types. Using objects means that lose type safety.
Demo
static Character[] charArray = {'b', 'i', 'l', 'l'};
static Integer[] intArray = {1, 2, 3, 4, 5};
public static void main(String[] args) {
List<Character> charList = arrayToList(charArray, new ArrayList<>());
List<Integer> intList = arrayToList(intArray, new ArrayList<>());
System.out.println(intList.get(0));
}
public static List arrayToList(Object[] array, List<Object> list) {
for (Object object: array) {
list.add(object);
}
return list;
}
控制台輸入出結果:
1
如果修改代碼,List<String> intList,這樣就會出錯。
static Character[] charArray = {'b', 'i', 'l', 'l'};
static Integer[] intArray = {1, 2, 3, 4, 5};
public static void main(String[] args) {
List<Character> charList = arrayToList(charArray, new ArrayList<>());
List<String> intList = arrayToList(intArray, new ArrayList<>());
System.out.println(intList.get(0));
}
public static List arrayToList(Object[] array, List<Object> list) {
for (Object object: array) {
list.add(object);
}
return list;
}
控制台輸入出結果:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
static Character[] charArray = {'b', 'i', 'l', 'l'};
static Integer[] intArray = {1, 2, 3, 4, 5};
public static void main(String[] args) {
List<Character> charList = arrayToList(charArray, new ArrayList<>());
List<Integer> intList = arrayToList(intArray, new ArrayList<>());
System.out.println(intList.get(0));
}
public static<T> List<T> arrayToList(T[] array, List<T> list) {
for (T object: array) {
list.add(object);
}
return list;
}