作者:cndz 围观群众:646 更新于 标签:泛型泛型详解泛型代码示例
Java泛型是JDK5引入的新特性,Java泛型是一种非常重要的编程特性,它可以让我们在编写代码时将类型作为参数进行传递,从而使得编写类型安全的泛型代码成为可能。泛型的出现使得我们能够在编译期间就能检查出类型安全问题,而不是在运行时才发现。Java泛型可以应用于类、接口和方法中,可以让我们编写更加通用的代码,这样我们就不需要为每种数据类型都写一份代码。在本文中,我们将深入探讨Java泛型的相关知识。
泛型的作用在于可以让代码更加通用、灵活和安全。它可以帮助我们避免类型转换异常、提高代码的可读性和维护性。使用泛型可以让我们编写更加通用的代码,这样我们就不需要为每种数据类型都写一份代码。在实际开发中,使用Java泛型可以帮助我们提高代码的可读性和维护性,减少代码重复,提高代码的可扩展性和可复用性。
Java泛型的优点主要有以下几个方面:
java 中泛型标记符:
Java泛型的使用可以分为三个部分:
<T> 返回类型 方法名(参数列表) { ... }
举个例子(使用泛型打印不容类型的数组信息,分别以Integer,Double,String类型举例)
public class test
{
// 泛型方法 printArray
public static < T > void aryPrint( T[] inputArray )
{
// 输出数组元素
for ( T element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// 创建不同类型数组: Integer, Double 和 String
Integer[] intArray = { 1, 2, 3, 4, 5 };
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
String[] strArray ={"hello","word"};
System.out.println( "整型数组元素为:" );
aryPrint( intArray ); // 传递一个整型数组
System.out.println( "\n双精度型数组元素为:" );
aryPrint( doubleArray ); // 传递一个双精度型数组
System.out.println( "\n字符串数组元素为:" );
aryPrint( strArray ); // 传递一个字符型数组
}
}
运行结果如下:
可能有时候,你会想限制那些被允许传递到一个类型参数的类型种类范围。比如上面的例子,只允许打印Number以及其子类的数组。首先列出参数类型的名称 后跟extends关键字,最后是他的上界。比如:
public class test
{
// 泛型方法 printArray
public static < T extends Number> void aryPrint( T[] inputArray )
{
// 输出数组元素
for ( T element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// 创建不同类型数组: Integer, Double 和 String
Integer[] intArray = { 1, 2, 3, 4, 5 };
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
String[] strArray ={"hello","word"};
System.out.println( "整型数组元素为:" );
aryPrint( intArray ); // 传递一个整型数组
System.out.println( "\n双精度型数组元素为:" );
aryPrint( doubleArray ); // 传递一个双精度型数组
System.out.println( "\n字符串数组元素为:" );
aryPrint( strArray ); // 传递一个字符型数组
}
}
这个时候下面打印字符串数组的时候讲编译就会有问题。因为我们指定了他的上限必须是Number类。而string类显然不是。
class 类名<T> { ... }
interface 接口名<T> { ... }
举个例子(定义一个泛型类,打印不懂类型的对象)
public class Test<T> {
private T obj;
public Test(T obj) {
this.obj = obj;
}
public T getObj() {
return obj;
}
public void show(Test<?> t) {
System.out.println(t.getObj());
}
}
public class Main {
public static void main(String[] args) {
Test<String> test1 = new Test<>("Hello");
Test<Integer> test2 = new Test<>(123);
Test<Object> test3 = new Test<>(new Object());
test1.show(test1);
test1.show(test2);
test1.show(test3);
}
}
运行结果如下:
通配符:可以使用通配符来表示某种类型的所有子类型或超类型。通配符使用”?”来表示,它可以用在以下三种情况中:
泛型类的声明中:可以使用通配符来表示泛型类的类型参数。
Java泛型是一种非常重要的编程特性,它可以使代码更加通用、灵活和安全。使用泛型可以帮助我们避免类型转换异常、提高代码的可读性和维护性。在实际开发中,我们应该尽可能地使用泛型来编写类型安全的代码。同时,我们还应该熟练掌握泛型的使用方法,包括定义泛型类和接口、使用泛型方法和通配符等。只有这样,我们才能更加高效地编写Java程序,提高我们的开发效率和代码的可维护性。