Uso genérico de <T> T y T de Java

<T> T indica que el valor devuelto es un tipo genérico. Qué tipo de datos se devuelve, y una sola T indica que cuando se crea el objeto actual, el tipo de parámetro que pasa es limitado. En el siguiente caso, un tipo genérico se pasa El método de retorno de para obtener los primeros datos de cada colección se realiza mediante dos métodos de retorno de valores <T> T y T.

1. Uso de <T> T

Esta <T> T significa que el valor de retorno T es genérico, y T es un marcador de posición para decirle al compilador que esto se guardará para mí primero, y te lo diré cuando lo compile.

package  xxxx;

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);
    }

}

2. Uso de T
Valor de retorno, escriba directamente T para indicar el tipo de parámetro restringido. Este método se usa generalmente para operar conjuntamente un objeto de clase y luego obtener la información de la colección en su interior.

package xxxxxx;

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);
    }
}

Para resumir una oración:
El método getListFisrt de la primera clase Demo de uso puede aceptar cualquier tipo de parámetros de lista, y la
segunda clase Demo ha limitado el tipo de T cuando se inicializa, por lo que el método getListFirst solo puede aceptar parámetros de tipo Lista.

Supongo que te gusta

Origin blog.csdn.net/wujian_csdn_csdn/article/details/112735612
Recomendado
Clasificación