Pergunta

Li no JLS 7 a seguinte frase.

É um erro de tempo de compilação usar o nome de um parâmetro de tipo de qualquer declaração circundante no cabeçalho ou corpo de um método de classe.

Por favor, explique seu significado.

Foi útil?

Solução

Isso significa que você não pode fazer

class Test<T> {
    static void f(T a) {
    }
}

Você tem que fazer

class Test<T> {
    static <T> void f(T a) {
    }
}

Os tipos genéricos de um método estático são independentes dos tipos genéricos da classe ou de outros métodos.

Então você pode até fazer algo como

class Test {
    static <A, B, C> void f(A a, B b, C c) {
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top