什么是泛型
代码模板
定义和使用含有泛型的类
在没有用泛型之前
如果要获得某个变量类型是什么 比如String Int 等等
需要单独写一个类来进行
public class GenericTest{
public String name;
public GenerciTest(T name) {
this.name = name;
}
public static void main(String[] args){
System.println.out("name的类型是:"+name.getClass().getName())
}
}
后面判断int float 等等 或者 自定义的类 那写不完的类判断
所以
泛型
应运而生
泛型类
public class GenerciTest<T> {
private T t;
public T getT() {
return t;
}
public void setName(T t) {
this.t = t;
}
public GenerciTest(T t) {
this.t = t;
}
public void say() {
System.out.println("t的类型是:" + t.getClass().getName());
}
}
创建的时候确定 T 是什么类型
个人理解
T
是
类型变量
好比如 定义一个 变量 public String name = "111";
name
是保存
111字符串
的变量
而
T
可以理解为 保存
数据类型
的一个变量 String Integer Char 还有
自定义类
等等
泛型
省去了
大量重复的代码
定义和使用含有泛型的方法
package com.generci.day01.sec01;
/**
* 定义和使用含有泛型的方法
*/
public class Demo02 {
public static <T> void print(T t){
System.out.println(t.getClass().getName());
}
public static void main(String[] args) {
print("");
print(66);
print(66.33);
print('A');
print(true);
}
}
调用方法的时候确定泛型的类型
输出

定义和使用含有泛型的接口
GenericInterface
接口
package com.generci.day01.sec02;
/**
* 接口上定义泛型
*
* 使用接口的时候确定泛型的类型
* @param <T>
*/
public interface GenericInterface<T> {
/**
* 添加
* @param t
*/
void add(T t);
/**
* ‘更新
* @param index
* @return
*/
T get(Integer index);
}
Demo01
package com.generci.day01.sec02;
/**
* 定义和使用含有泛型的接口
*
* 确定泛型的类型
*/
public class Demo01 implements GenericInterface<String>{
@Override
public void add(String s) {
}
@Override
public String get(Integer index) {
return null;
}
}
实现
GenericInterface
接口时 确定了
T
类型 为
String
Demo02
package com.generci.day01.sec02;
/**
* 定义和使用含有泛型的接口
*
* 始终不确定泛型的类型,直到创建对象时,确定泛型的类型
*/
public class Demo02<T> implements GenericInterface<T> {
@Override
public void add(T t) {
}
@Override
public T get(Integer index) {
return null;
}
}
测试
创建对象的时候确定了
T
的具体类型是
Integer
调用add方法时 虚拟机会自动将
T
类型变成
Integer
小结
T
不能是
基本类型
泛型就是编写
模板
代码来适应任意类型
定义在
类
上的泛型 使用
类
的时候会确定泛型的类型
方法
方法
接口
接口
未指明
T
类型时 编译器默认为
Object
即使再小的帆也能远航