2016-07-20 27 views

Antwort

0
int c = a*b; 

Diese Aussage tatsächlich funktioniert, da T durch Integer begrenzt, so nach dem Löschen, die Typen von a und b sind Integer und sie sind unboxed in int.

return c; 

Dies funktioniert nicht, da der Rückgabetyp der Methode ist nicht Integer, es T ist, und obwohl <T extends Integer> und Integer ist final, nur sein T kann so Integer, wird der Compiler erlauben nicht, dass , da es die finality des gebundenen Typs nicht berücksichtigt (dh, soweit es betroffen ist, kann die Methode Instanzen einer Unterklasse des gebundenen Typs akzeptieren, und sie kann int nicht an jede Unterklasse automatisch boxen -Klasse vom Typ gebunden).

Änderung der Rückgabetyp zu Integer den Code Pass Compilation machen:

public static <T extends Integer> Integer addNumber(T a , T b){ 
    int c = a*b; 
    System.out.println(c); 
    return c; 
} 

Natürlich ist es nicht sinnvoll Integer zu verwenden macht (oder eine endgültige Klasse) als Typ für eine generische Art gebunden Parameter.

+0

Es ist auch nicht mit int c Arbeits = a * b. – Pooja

+0

@Pooja Es tut für mich. Ich habe es gerade ausprobiert. – Eran

+0

Wenn es ist nicht erlaubt a * b – Pooja

1

Generics sollen nicht mit primitiven Typen verwendet werden. T gibt einen Typparameter an, der ein Objekt sein sollte.
Weitere Referenz
Why don't Java Generics support primitive types? Java Generics ? , E and T what is the difference?
Restrictions on generics

+0

Integer ist auch eine Wrapper-Klasse und wenn wir Mathematik-Operation auf ihr Objekt tun, ist es erlaubt, also warum nicht, wenn T integer erweitert – Pooja

+0

@pooja https://docs.oracle.com/javase/tutorial/ Java/Generika/Beschränkungen.html –