2013-11-16 3 views
1

Мне нужно создать функцию 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.

+4

Примитивные типы и дженерики не сочетаются хорошо. Массивы и дженерики тоже не сочетаются. Поэтому массивы примитивных типов и дженериков в значительной степени несовместимы. Вам нужно будет предоставить один метод для каждого типа массива, точно так же, как 'java.util.Arrays' делает для различных методов. –

+0

Я боюсь, что JBNizet прав. Если вам нужна эта функциональность, просто перегрузите метод для типов, которые вам нужны (Integer, Long, ...). –

ответ

0

E является общим типом. это означает, что вы можете вызывать метод getTotal с массивом любого типа. , например, вы можете вызвать getTotal с массивом String и 0 не String.