天天看点

泛型

什么是泛型

代码模板

定义和使用含有泛型的类

在没有用泛型之前

如果要获得某个变量类型是什么 比如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

即使再小的帆也能远航