Hej, próbuję rozgryźć ideę generyków w Javie. O ile w przypadku prostych przykładów na pierwszy rzut oka widać zalety, to zastanawiam się w czym generyki są lepsze, jeśli chodzi o górne ograniczenia. Weźmy prosty przykład liczenia średniej.
Wersja z generykiem
class Generic<T extends Number> {
private T[] numbers;
Generic(T[] numbers) {
this.numbers = numbers;
}
double avg() {
double sum = 0;
for (T number : numbers) {
sum += number.doubleValue();
}
return sum / numbers.length;
}
}
Musimy się zawęzić do podklasy Number
stąd zrobiłem <T extends Number>
. Wszystko oczywiście działa i dla inta i dla floata, ale można by też zrobić tak:
class Normal {
private Number[] numbers;
Normal(Number[] numbers) {
this.numbers = numbers;
}
double avg() {
double sum = 0;
for (Number number : numbers) {
sum += number.doubleValue();
}
return sum / numbers.length;
}
}
Ten przykład działa oczywiście tak samo. I teraz rozkminiam dla tego konkretnego przykładu, czy warto robić klasę parametryzowaną, czy może normalną. ;)