Tipo de entendimento Parâmetros no Scala
Estou tentando entender os parâmetros de tipo no Scala. Vejamos o seguinte exemplo geral:
def func1[T](a : T) : T = a
Eu entendo que func1 leva 1 parâmetro de qualquer tipo e retorna esse parâmetro do mesmo tipo. O que eu não entendo é o porquê:
def func1[T]
Por que [T] logo após a função1 ?? Nós poderíamos simplesmente escrever sem [T] depois de func1, como:
def func1(a : T) : T = a
1) O que isso significa [T] após a função1 e por que a colocamos lá?
2) Por que fazemos o mesmo com as aulas?
class MyClass[T]{...}
Quero dizer, as instanciações do MyClass são do tipo MyClass. O que significa [T] lá? Você não diz que tenho uma classe booleana do tipo MyClass, diz que tenho um objeto do tipo MyClass, certo?
Desde já, obrigado.