Мне нужно создать функцию getTotal, чтобы найти общее количество всех чисел в массиве 2d. Он должен применяться к float, int, long и double. Итак, я попытался создать общий метод в Java. У меня есть знание шаблонов в C++. Итак, я попробовал аналогичный подход, но java-компилятор показывает ошибки.метод generics в java
public static <E> E getTotal(E arr[][],int row, int col)
{
E total=0;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
total=total + arr[i][j];
}
}
return total;
}
Я получаю эти ошибки:
2darray.java:4: error: incompatible types
E total=0;
^
required: E
found: int
where E is a type-variable:
E extends Object declared in method getTotal(E[][],int,int)
2darray.java:7: error: bad operand types for binary operator '+'
total=total + arr[i][j];
^
first type: E
second type: E
where E is a type-variable:
E extends Object declared in method getTotal(E[][],int,int)
2darray.java:42: error: method getTotal in class darraysoperation cannot be applied to given types;
System.out.println("Total is "+foo.getTotal(multi,5,10));
^
required: E[][],int,int
found: int[][],int,int
reason: inferred type does not conform to declared bound(s)
inferred: int
bound(s): Object
where E is a type-variable:
E extends Object declared in method getTotal(E[][],int,int)
3 errors
Я не получаю эти ошибки, как я новичок в дженериков в Java.
Примитивные типы и дженерики не сочетаются хорошо. Массивы и дженерики тоже не сочетаются. Поэтому массивы примитивных типов и дженериков в значительной степени несовместимы. Вам нужно будет предоставить один метод для каждого типа массива, точно так же, как 'java.util.Arrays' делает для различных методов. –
Я боюсь, что JBNizet прав. Если вам нужна эта функциональность, просто перегрузите метод для типов, которые вам нужны (Integer, Long, ...). –