Page 110 - 6253
P. 110
true, якщо об’єкт з якого викликається метод еквівалентний об’єкту, що
передається як аргумент.
boolean sameAvg(Generic<T> obj) {
if(average() == obj.average())
return true;
return false;
}
Хоча таке рішення здається цілком логічним, проте на практиці воно
працювати не буде. Проблема полягає в тому, що тип об’єкту, з якого викликається
метод повинен співпадати із типом об’єкту, який передається як аргумент.
Наприклад, якщо об’єкт, який викликає метод має тип Double, то параметр obj
також повинен бути типу Double.
У цьому випадку, єдиним правильним рішенням є використання шаблонів
аргументів. Шаблон аргументів вказується через символ «?» та представляє собою
невідомий тип даних. Розглянемо приклад у якому демонструється використання
шаблону аргументів.
// Використання шаблону аргументів
class Generic <T extends Number> {
T[] nums;
Generic(T[] о) {
nums = о;
}
double average() {
double sum = 0.0;
for(int i=0; i < nums.length; i++) {
sum += nums[i].doubleValue();
}
return sum/nums.length;
109