泛型
目录
什么是泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型方法
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
下面是定义泛型方法的规则:
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的
)。 - 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。
//使用泛型
Map<String,String> map2 = new HashMap();
map2.put("key", "values");
String str2 = map2.get("key");
泛型的作用
ava 语言中,引入泛型实乃为一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。作用如下:
1,类型安全。
泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2,消除强制类型转换。
泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3,潜在的性能收益。
泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
4、更好的代码复用性,比如实现泛型算法
在框架设计时候,BaseDao
泛型的特性
泛型的使用
普通泛型
声明
/**
* author : northcastle
* createTime:2021/10/23
* 泛型方法的定义
*/
public class GenericMethod {
//1.普通的泛型方法
public <T> String commonMethod(String name,T t){
String res = "";
res += name +"-"+ t;
System.out.println("普通泛型方法 : "+res);
return res;
}
}
调用
/**
* author : northcastle
* createTime:2021/10/23
*/
public class GenericMethodApplication {
public static void main(String[] args) {
//1.调用普通泛型方法
GenericMethod genericMethod = new GenericMethod();
String commonRes01 = genericMethod.commonMethod("001", "bb");
System.out.println(commonRes01);
String commonRes02 = genericMethod.commonMethod("002", 100);
System.out.println(commonRes02);
String commonRes03 = genericMethod.commonMethod("003", true);
System.out.println(commonRes03);
System.out.println("==================");
}
}
静态泛型方法
声明
/**
* author : northcastle
* createTime:2021/10/23
* 泛型方法的定义
*/
public class GenericMethod {
//2.静态的泛型方法
public static <T,E> String staticMethod(String name,T t,E e){
String res = "";
res += name +"-"+ t +"-"+ e;
System.out.println("静态泛型方法 : "+res);
return res;
}
}
调用
package com.northcastle.genericmethod;
/**
* author : northcastle
* createTime:2021/10/23
*/
public class GenericMethodApplication {
public static void main(String[] args) {
//2.调用静态泛型方法
String staticRes01 = GenericMethod.staticMethod("001", "aa", "bb");
System.out.println(staticRes01);
String staticRes02 = GenericMethod.staticMethod("002", 100, 'c');
System.out.println(staticRes02);
String staticRes03 = GenericMethod.staticMethod("003", 12.05d, false);
System.out.println(staticRes03);
System.out.println("==================");
}
}
泛型可变参数
声明
/**
* author : northcastle
* createTime:2021/10/23
* 泛型方法的定义
*/
public class GenericMethod {
//3.带可变参数的泛型方法
public <A> void argsMethod(A ... args){
for (A arg : args) {
System.out.println(arg);
}
}
}
调用
package com.northcastle.genericmethod;
/**
* author : northcastle
* createTime:2021/10/23
*/
public class GenericMethodApplication {
public static void main(String[] args) {
//3.调用可变参数的方法
genericMethod.argsMethod(1,2,300,400,500,600);
System.out.println("==================");
}
}
标签:Java,String,System,学习,类型,泛型,println,public,中泛
From: https://www.cnblogs.com/BingBing-8888/p/18454749