Burada

2014-11-13 34 views
5

ile nasıl işlem yapılıyor T'nin Tamsayı ve Dizge'yi nasıl aldığını anlayamıyorum. Burada görüntü fonksiyonunda olduğu gibi T, hem Tamsayı hem de Dize ile uğraşmaktadır. Bu kod nasıl çalışıyor? 100 (Integer için autoboxed çünküBurada

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

Bu kod derlenmiyor - 'Operatör + argüman türü T 0 – Eran

+0

için undefined İhtiyacınız olan her şey belgelenmiştir [here] (https://docs.oracle.com/javase/tutorial/ java/jenerik /). –

+0

"Bu kod nasıl çalışıyor?" Dedin. Çalıştığını gördün mü? Bize [IDEONE] kullanarak çıkış yapın (http://www.ideone.com). – ha9u63ar

cevap

5

Sen, İşte

void display(Object give_num, Object give_String) 

, size uygun sağlamak tartışmaların hem temelde eşit olan yöntemin ham formu yürütmesini olduğunuz bir Object alt sınıfı) ve "xyz"

doğru Genellemelere kullanmak için Object bir alt sınıf) olan (bir String olduğunu, yapmanız gereken:

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

veya iki durumda da

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

, sen derleyici Runtime de Integer/String ile T değiştirmek için niyet farkında olacaktır çünkü kod, derleme unutmayın edeceğiz Ancak parametre tipleri aynı sağlanan tipte değildir.

+0

Küçük bir kenara, ancak '100' bir "Tamsayı" içine otomatik olarak kaydedilir. Bu durumda bu önemli değil, aynı yöntemde farklı aşırı yükleriniz varsa, işler zorlaşabilir. – biziclop

+0

Evet, gerçekten. Sadece notu ekledim. Teşekkürler :) –

+0

Hey kod çalışıyor. Düzeltdiğim bir hata oluştu. – swati