Olá
Na especificação do Java, no capítulo 4, item 4.11 há o seguinte exemplo:
import java.util.Random;
import java.util.Collection;
import java.util.ArrayList;
// Java Language Specification
// Third Edition
// CHAPTER 4
// Types, Values, and Variables
// 4.11 Where Types Are Used
class MiscMath<T extends Number> {
int divisor;
MiscMath(int divisor) {
this.divisor = divisor;
}
float ratio(long l) {
try {
l /= divisor;
} catch (Exception e) {
if (e instanceof ArithmeticException)
l = Long.MAX_VALUE;
else
l = 0;
}
return (float)l;
}
double gausser() {
Random r = new Random();
double[] val = new double[2];
val[0] = r.nextGaussian();
val[1] = r.nextGaussian();
return (val[0] + val[1]) / 2;
}
Collection<Number> fromArray(Number[] na) {
Collection<Number> cn = new ArrayList<Number>();
for (Number n : na) {
cn.add(n);
}
return cn;
}
void <S> loop(S s) {
this.<S>loop(s);
}
}
Observando o último método void <S> loop(S s), aparece a seguinte dúvida. Há alguma diferença entre colocar <S> depois de void como está no exemplo da especificação e que repeti abaixo na classe Depois ou se deveria colocar <S> void loop (S s) tal como na classe Antes.
public class Depois {
void <S> loop(S s) {
this.<S>loop(s);
}
}
public class Antes {
<S> void loop(S s) {
this.<S>loop(s);
}
}
Quem pode explicar exatamente o que acontece?
[]s
Luca