🏠个人主页: 黑洞晓威
🧑个人简介:大家好,我是晓威,一名普普通通的大二在校生,希望在CSDN中与大家一起成长。🎁如果你也在正在学习Java,欢迎各位大佬来到我的博客查漏补缺呀,如果有哪里写的不对的地方也欢迎诸佬指正啊。
一、泛型的概念
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
二、泛型的好处
(1)保证了类型的安全性。
(2) 消除强制转换
(3)避免了不必要的装箱、拆箱操作,提高程序的性能
三、泛型的使用
类的内部结构可以使用泛型
public class Student <T>{
private String name;
private T age;//age的数据类型为泛型T
public Student() {
}
public Student(String name, T age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public T getAge() {
return age;
}
public void setAge(T age) {
this.age = age;
}
}
如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型建议:实例化时指明类的泛型
public static void main(String[] args) {
Student student = new Student("Mike",17);
//此时构造器中的age类型为Object
Student student1 = new Student<Integer>("tom",18);
//此时构造器中的age必须为Integer
}
1、泛型的子类
- 子类继承的父类泛型已经确定
public class son extends Student<Integer>{//子类继承的父类泛型已经确定
public son() {
}
public son(String mary, String i) {
}
}
public static void main(String[] args) {
son son = new son();
son.setAge(19);//Age为int型
}
- 子类继承的父类泛型没有确定
public class son<T> extends Student<T>{//此时son<T>:是泛型
}
public static void main(String[] args) {
son<Integer> son = new son<>();//第一个泛型确定后后面泛型类型可省略
son.setAge(18);//此时age也是int型
}
2、泛型的注意点
- 泛型可能有多个参数,此时应该将多个参数一起放在尖括号内。比如:<E1,E2,E3>
- 泛型要用则一路都用,要不用就一路都不用
- 泛型的指定中不能使用基本数据类型,可以使用包装类替换
- 异常类不能是泛型
3、泛型中子类与父类之间的继承关系
4、泛型方法
- 在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系
- 泛型方法所属的类是不是泛型类不影响泛型方法
- 泛型方法可以声明为静态的。因为泛型参数是在调用的方法时确定的。并非在实例化时确定的。
public static <E> List<E> copyformarray(E[] arr){
List<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}
🎉文章到这里就结束了,感谢诸佬的阅读。🎉
💕欢迎诸佬对文章加以指正,也望诸佬不吝点赞、评论、收藏加关注呀😘