在JAVA中返回类型使用泛型T和Object有什么区别?


Java之泛型 T与T的用法

原:Java之泛型<T> T与T的用法

<T> T表示返回值是一个泛型,传递啥,就返回啥类型的数据,而单独的T就是表示限制你传递的参数类型,这个案例中,通过一个泛型的返回方式,获取每一个集合中的第一个数据, 通过返回值<T> T 和T的两种方法实现

T 用法

这个<T> T 表示的是返回值T是泛型,T是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候,告诉你。

package com.yellowcong.test;

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.formula.functions.T;

public class Demo {

    public static void main(String[] args) {

        Demo demo = new Demo();

        //获取string类型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);

        //获取nums类型
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);

        Integer num = demo.getListFisrt(nums);
        System.out.println(num);
    }

    /**
     * 这个<T> T 可以传入任何类型的List
     * 参数T
     *     第一个 表示是泛型
     *     第二个 表示返回的是T类型的数据
     *     第三个 限制参数类型为T
     * @param data
     * @return
     */
    private <T> T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }

}

T 用法

返回值,直接写T表示限制参数的类型,这种方法一般多用于共同操作一个类对象,然后获取里面的集合信息啥的。

package com.yellowcong.test;

import java.util.ArrayList;
import java.util.List;

public class Demo2<T> {

    public static void main(String[] args) {

        //限制T 为String 类型
        Demo2<String> demo = new Demo2<String>();

        //获取string类型
        List<String> array = new ArrayList<String>();
        array.add("test");
        array.add("doub");
        String str = demo.getListFisrt(array);
        System.out.println(str);

        //获取Integer类型 T 为Integer类型
        Demo2<Integer> demo2 = new Demo2<Integer>();
        List<Integer> nums = new ArrayList<Integer>();
        nums.add(12);
        nums.add(13);
        Integer num = demo2.getListFisrt(nums);
        System.out.println(num);
    }

    /**
     * 这个只能传递T类型的数据
     * 返回值 就是Demo<T> 实例化传递的对象类型
     * @param data
     * @return
     */
    private T getListFisrt(List<T> data) {
        if (data == null || data.size() == 0) {
            return null;
        }
        return data.get(0);
    }
}

Java泛型

java 泛型接口参数 java 泛型 t_Java泛型

泛型即是参数化类型,就是将具体的类型参数化。在方法参数中将类型定义为形参,当在调用时传入具体的类型(实参)。

要点

泛型类

public class GenericClazz<T> {

    private T data;

    public void setData(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public static void main(String[] args) {
        GenericClazz<String> stringCLazz = new GenericClazz<>();
        stringCLazz.setData("I am String type");
        System.out.println(stringCLazz.getData());

        GenericClazz<Integer> integerClazz = new GenericClazz<>();
        integerClazz.setData(9999);
        System.out.println(String.format("I am Integer type: %d", integerClazz.getData()));
    }
}

<T> T标记的泛型方法

/**
     * 泛型方法
     * 1. <T>声明此方法为泛型方法
     * 2. <T>表明该方法可以并仅限于使用泛型类型T
     * 3. 此处的T可以为任意写为任意标识,常见的如T、E、K、V等
     *
     * @param type 传入的泛型实参
     * @param <T> 返回值为T类型
     * @return
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public <T> T genericMethod(Class<T> type) throws IllegalAccessException, InstantiationException {
        T instance = type.newInstance();
        return instance;
    }

    public <T> GenericClazz<T> genericMethod2(Class<T> type) {
        return new GenericClazz<>();
    }