2014-11-13 3 views
5

Ich bin nicht in der Lage zu verstehen, wie T Integer und String. Wie hier in der Display-Funktion behandelt T sowohl Integer als auch String. Wie funktioniert dieser Code?Wie <T> handelt hier mit String und Integer

class firstBase { 
    <T> void display(T give_num, T give_String) { 
     System.out.println("The given number is = " 
          + give_num + " The given String is = " + give_String); 

     System.out.println("The class of given number is = " 
          + give_num.getClass() + 
          " The class of given_String is = "+give_String.getClass()); 
    } 
} 


public class testanonymous { 
    public static void main(String[] args) { 
     firstBase fb = new firstBase(); 
     fb.display(100, "xyz"); 
    } 
} 
+3

Dieser Code wird nicht kompiliert - 'Der Operator + ist für die Argumentart (en) nicht definiert T' – Eran

+0

Alles, was Sie brauchen, ist dokumentiert [hier] (https://docs.oracle.com/javase/tutorial/ Java/Generika /). –

+0

Sie sagten "Wie funktioniert dieser Code?". Hast du gesehen, dass es funktioniert? Zeige uns die Ausgabe mit [IDEONE] (http://www.ideone.com). – ha9u63ar

Antwort

5

Sie den Aufruf des rohen Form des Verfahrens, das im Grunde gleich ist

void display(Object give_num, Object give_String) 

hier beide der Argumente, die Sie fit liefern, weil 100-Integer autoboxed ist (die eine Unterklasse von Object ist) und „xyz“ ist ein String (die eine Unterklasse von Object ist)

Generics richtig nutzen zu können, müssen Sie tun:

fb.<String>display(100, "xyz"); 

oder

fb.<Integer>display(100, "xyz"); 

In beiden Fällen beachten Sie, dass der Code nicht kompiliert, da der Compiler Ihrer Absicht bewusst sein T mit Integer/String zur Laufzeit zu ersetzen, Die Parametertypen sind jedoch nicht vom gleichen Typ.

+0

Eine kleine Seite, aber "100" wird zuerst in eine "Ganzzahl" autoboxiert. In diesem Fall ist das nicht wichtig, aber wenn Sie verschiedene Überladungen der gleichen Methode haben, können die Dinge schwierig werden. – biziclop

+0

Ja, tatsächlich. Ich habe gerade die Notiz hinzugefügt. Danke :) –

+0

Hey Code funktioniert gut. Es gab einen Fehler den ich korrigiert habe. – swati

Verwandte Themen