0
点赞
收藏
分享

微信扫一扫

Java - generic

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

可以使用泛型解决该问题,将返回类型设置为T。

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;
}

 


举报

相关推荐

0 条评论