Qual é a diferença entre <?> E <T> em genéricos java?

Um, genéricos personalizados T e? Genéricos curinga

? E ambos representam tipos incertos  

public static void printColl(ArrayList<?> al){
    Iterator<?> it = al.iterator();
    while(it.hasNext()){
        System.out.println(it.next().toString());
    }
}

Mas se for um T genérico personalizado, T pode ser manipulado na função. Por exemplo, pode ser escrito assim em enquanto

T t = it.next ();
System.out.println (t);

1. Tipo genérico curinga <?> Cenários aplicáveis:

Existe apenas um local em toda a classe que usa genéricos. Ao usá-lo, preste atenção em adicionar parâmetros genéricos que não podem chamar métodos relacionados a tipos de parâmetros .

Por exemplo, para imprimir todo o conteúdo em qualquer conjunto de tipo parametrizado, é adequado usar curinga genérico <?>
 

public static void printCollecton(Collection <?> collection){
    for(Object obj: collection){
        System.out.println(obj);
    }
}

2. Personalize o <T> genérico para se adaptar à cena:

Quando uma variável de tipo é usada para expressar a relação entre dois parâmetros ou entre um parâmetro e um valor de retorno, ou seja, variáveis ​​unificadas de vários tipos são usadas em dois lugares (parâmetros ou valores de retorno) da assinatura do método, ou a variável de tipo é usada no código do corpo do método Também é usado em vez de apenas na assinatura, que deve usar <T> genérico personalizado.

A parte genérica pode chamar alguns métodos sobre o tipo. Por exemplo, o método add da coleção.
 

public static <T> T autoConvertType(T obj){
     return(T)obj;
}

 

Existem três tipos genéricos:
          [1] ArrayList <T> al = new ArrayList <T> (); O elemento de coleção especificado só pode ser do tipo T
          [2] ArrayList <?> Al = new ArrayList <?> (); O elemento de coleção pode É um tipo arbitrário, esse tipo de sem sentido, geralmente no método, apenas para ilustrar o uso
          [3] ArrayList <                ? Extends E > al = new ArrayList < ? Extends E > ();
          O limite do tipo genérico
:? Estende E: receba E Tipo ou subtipo de E.
               ? super E: Recebe o tipo E ou o supertipo de E.

Acho que você gosta

Origin blog.csdn.net/sanmi8276/article/details/108616223
Recomendado
Clasificación