2014-11-13 9 views
5

Nie jestem w stanie zrozumieć, w jaki sposób T przyjmuje Integer i String. Jak tutaj w funkcji wyświetlania T zajmuje się zarówno Integer, jak i String. Jak działa ten kod?How ma tutaj do czynienia z String i 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

Ten kod nie kompiluje się - 'Operator + jest niezdefiniowany dla typów argumentów T' – Eran

+0

Wszystko czego potrzebujesz jest udokumentowane [tutaj] (https://docs.oracle.com/javase/tutorial/ java/generics /). –

+0

Powiedziałeś "Jak działa ten kod?". Czy widziałeś, że działa? Pokaż nam wyniki za pomocą [IDEONE] (http://www.ideone.com). – ha9u63ar

Odpowiedz

5

Ty wywoływanie surowego formę metody, która jest w zasadzie równa

void display(Object give_num, Object give_String) 

Tutaj zarówno z argumentów świadczących Ci pasuje, bo 100 jest autoboxed do Integer (co jest podklasą Object), a "xyz" to String (która jest podklasą Object)

Aby poprawnie używać Generics, musisz zrobić:

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

lub

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

W obu przypadkach będziesz pamiętać, że kod nie skompilować, ponieważ kompilator będzie wiedział o swoim zamiarze zastąpienia T z Integer/String w czasie wykonywania, ale typy parametrów nie są tego samego typu.

+0

Niewielki bok, ale "100" jest najpierw autoboxed na "Integer". W tym przypadku nie jest to ważne, ale jeśli masz różne przeciążenia tą samą metodą, może się to okazać trudne. – biziclop

+0

Tak, rzeczywiście. Właśnie dodałem notatkę. Dzięki :) –

+0

Hej kod działa dobrze. Wystąpił błąd, który poprawiłem. – swati

Powiązane problemy