泛型是Java语言中的一项重要特性。它可以让程序员编写更加通用、更加灵活的代码。本文将详细介绍Java中的泛型编程,包括泛型类、泛型方法、通配符的概念和使用方法,并提供相应的代码案例。
泛型类是指具有一个或多个类型参数的类。在定义泛型类时,可以在类名后面用<T>表示类型参数,类型参数可以用在成员变量、方法参数和返回值等位置。
public class MyGenericClass<T> { private T value; public MyGenericClass(T value) { this.value = value; } public T getValue() { return value; } }
上面的代码定义了一个泛型类MyGenericClass,它有一个类型参数T。在构造函数中,使用了T类型的参数value。在getValue方法中,返回了T类型的值。
使用泛型类时,需要在类名后面用具体的类型替换T。例如:
MyGenericClass<String> strObj = new MyGenericClass<>("Hello, World!"); System.out.println(strObj.getValue()); // 输出:Hello, World!
上面的代码创建了一个MyGenericClass<String>类型的对象strObj,它的value成员变量的类型是String。在调用getValue方法时,返回了String类型的值。
泛型方法是指具有一个或多个类型参数的方法。在定义泛型方法时,可以在方法名前面用<T>表示类型参数,类型参数可以用在参数列表和返回值的类型中。
public class MyGenericMethod { public static <T> T getValue(T[] array, int index) { return array[index]; } }
上面的代码定义了一个泛型方法getValue,它有一个类型参数T。在方法参数列表中,使用了T[]类型的参数array和int类型的参数index。在方法返回值中,使用了T类型的值。
使用泛型方法时,需要在方法名前面用具体的类型替换T。例如:
String[] strArray = {"Hello", ", ", "World", "!"}; String str = MyGenericMethod.<String>getValue(strArray, 2); System.out.println(str); // 输出:World
上面的代码调用了泛型方法getValue,使用了String类型的参数T。在调用时,传入了一个String类型的数组和一个int类型的索引值。在返回值中,获取了String类型的值。
通配符是指用?表示的类型参数。在使用通配符时,不能对其进行赋值操作,只能用于参数列表中的类型匹配。
public class MyWildcard { public static void printList(List<? extends Number> list) { for (Number n : list) { System.out.print(n + " "); } System.out.println(); } }
上面的代码定义了一个通配符类型参数的方法printList,它的参数列表中包含一个List<? extends Number>类型的参数list。在方法中,使用了foreach循环遍历了list中的元素,并输出了它们的值。
使用通配符时,可以用? extends表示上限通配符,表示参数类型是某个类的子类;也可以用? super表示下限通配符,表示参数类型是某个类的父类。例如:
List<Integer> intList = Arrays.asList(1, 2, 3); List<Double> doubleList = Arrays.asList(1.1, 2.2, 3.3); MyWildcard.printList(intList); MyWildcard.printList(doubleList);
上面的代码创建了两个List类型的对象intList和doubleList,并将它们作为参数传递给了printList方法。在调用时,使用了上限通配符? extends Number。在输出时,分别输出了intList和doubleList中的元素。
本文介绍了Java中的泛型编程,包括泛型类、泛型方法、通配符的概念和使用方法。对于初学者来说,掌握泛型编程是一个很好的提高编程效率和代码复用性的方法。希望本文能够对大家有所帮助。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com