Só para informar algo que acabei de constatar no Java 5.
Ele não permite o código abaixo. Diz que existem método duplicados. Embora eu use Generics para diferenciar o tipo dos objetos permitidos em cada lista, ele considera os métodos com a mesma assinatura.
public void a(List<String> s) {}
public void a(List<Integer> s) {}
A implementação do Generics no Java faz o apagamento (Erasure) do tipo, e por isso no final os bytecodes gerados são os mesmo nos dois métodos.
aquilante
Mas isso é um erro então?
Suponhamos que eu tenha por algum motivo q implementar dessa forma, não teria como? Eu n entendi muito bem pq da esse erro, testei aqui e realmente n aceita. A única saída seria renomear as variáveis?
:?: :shock: :?: :lol:
fabim
aquilante:
Mas isso é um erro então?
Suponhamos que eu tenha por algum motivo q implementar dessa forma, não teria como? Eu n entendi muito bem pq da esse erro, testei aqui e realmente n aceita. A única saída seria renomear as variáveis?
:?: :shock: :?: :lol:
Nao e um erro. Estude a resposta do xandroalmeida e vc vai entender o pq.
xandroalmeida
aquilante:
Mas isso é um erro então?
Suponhamos que eu tenha por algum motivo q implementar dessa forma, não teria como? Eu n entendi muito bem pq da esse erro, testei aqui e realmente n aceita. A única saída seria renomear as variáveis?
:?: :shock: :?: :lol:
Não é um erro e sim uma caracteristica.
thegoergen
aquilante:
Mas isso é um erro então?
Suponhamos que eu tenha por algum motivo q implementar dessa forma, não teria como? Eu n entendi muito bem pq da esse erro, testei aqui e realmente n aceita. A única saída seria renomear as variáveis?
:?: :shock: :?: :lol:
Renomear as variáveis não irá mudar a assinatura do método !!
T
thingol
Em Scala o problema é exatamente o mesmo (se é que é um problema).
packageexample;objectScalaGenerics{defa(s:List[String]):Unit={Console.println("Chamado o primeiro overload");}/* Isto, em Scala, provoca o erro:double definition:method a:(List[Int])Unit andmethod a:(List[String])Unit at line 4have same type after erasure: (List)Unit */defa(s:List[Int]):Unit={Console.println("Chamado o segundo overload");}defmain(args:Array[String]):Unit={a("José"::"Aparecido"::Nil);//Deveriachamaroprimeirooverloada(List.range(1,10));//Devechamarosegundooverload}}