java泛型
本人自建博客添砖java
文章目录
基本理解
基本理解: 就像类是对对象的抽象, 泛型就是对类型的抽象, 其作用类似于c++的模板
语法
- 泛型的声明: interface接口{}和类<K, V>{}
- 实例化: 例:
List<String>strList = new ArrayList<String>(); Iterator<Customer> itrator = customers.itrator();
- 注意事项:
-
以大写字母表示泛型
-
在给泛型制定具体类型后, 可以指定该类型或者其子类类型
-
泛型只能是引用类型,不能是基本数据类型比如:int, double等, 如果传入的是基本数据类型的, 会执行自动装箱
-
在实际开发中,我们往往简写
ArrayList<Integer> list3 = new ArrayList<>();
-
经典案例
-
题目:
-
思路:
- 先对传入的参数进行验证
```java
if(!(emp1 instanceof Employee && emp2 instanceof Employee)) {
System.out.println("类型不正确..");
return 0;
}
```
- 先比较name
```java
int i = emp1.getName().compareTo(emp2.getName());
if(i != 0) {
return i;
}
```
3) 如果name相同, 再比较birthday, 先比较year
```java
int yearMinus = year - o.getYear();
if(yearMius != 0){
return yearMinus;
}
```
4) month, day 同理
自定义泛型类
- 基本语法:
class 类名<T, R...>{...表示可以有多个泛型 String name; R r; T t; ... }
- 注意细节
- 使用泛型的数组不能初始化, 不能确定泛型的类型, 无法开辟空间
T[] ts = new T[8];//会报错
- 静态的方法中不能使用类的泛型: 因为静态方法是在对象创建之前,加载类的时候进行加载
- 如果在创建对象时没有指定类型, 那就默认为Object
自定义泛型接口
- 泛型接口的类型, 在继承接口或者实现接口时确定
- 其他与泛型类类似
自定义泛型方法
- 泛型方法,可以定义在普通类中, 也可以定义在泛型类中
- eat方法不是泛型方法, 修饰符后没有<T, R…> 而是使用了泛型
public void eat(E e){}
泛型的继承和通配符
- 泛型不具有继承性
List<Object> list = new ArrayList<String>();//错误
通配符
2.通配符
- <? >: 支持任意泛型类型
- <? Extends A>: 支持A类以及A类的子类, 规定了泛型的上限
- <? super A>: 支持A类以及A类的父类, 不限于直接父类, 规定了泛型的下限
标签:java,自定义,通配符,接口,类型,泛型 From: https://blog.csdn.net/2301_79004249/article/details/139220566本文截图均来自于【零基础 快速学Java】韩顺平 零基础30天学会Java