Oque este metodo espera como parametro

Sempre que dou uma olhada no codigo do jdk do java fico sem entender oque esta acontecendo rs, entao resolvi perguntar aqui pra ver se consigo compreender.

tendo este codigo como exemplo

default void sort(Comparator<? super E> c) {
    Collections.sort(this, c);
}

oque ele espera como parametro? estou acostumado a ver codigo simples, onde tem um tipo e o nome dele, ex: Comparator comparator, agr parametro como esse Comparator<? super E> c ja nao entendo nada rs. mas sei que oque esta entre os <>representa o tipo do objeto Comparator, mas oque é esse <? super E ?> ???

É qualquer tipo de dado que tenha como superclasse o tipo E.

1 curtida

mas porque o “?” antes ? sei que ele representa um tipo curinga, mas ai o ? e o super E parecem referenciar só um dado já que não existe separação por virgula.

e esse dado que tem a superclasse o tipo E é que o construtor da superclasse tem que receber um E? e a classe deve fazer a chamada do super da superclasse? e qual a diferença entre E e T?

O ? significa “qualquer tipo”.
O E é o tipo de dado genérico utilizado.
Logo o ? super E significa "qualquer tipo que tenha o E como superclasse.

Não há nenhum tipo T no seu exemplo.
Mas assim, geralmente um tipo genérico é definido somente com uma letra, se tu tem mais tipos genéricos você usa letras diferentes.

1 curtida

agora entendi, muito obrigado, quanto ao T é porque eu via ele sendo usado varias vezes, então queria saber a diferença de T e E, mas já achei um artigo que trava de mais abreviações tbm e entendi