2015-07-05 14 views
7

Bu kod neden bir derleme hatası göstermiyor? Yukarıdaki yukarıdaki ince çalıştıran neden (aşağıda gösterilen) bu gibi normal bir kod SonraGenel bir yöntemdeki bir parametre aynı anda Tam Sayı ve Karakter sınıfına nasıl atanabilir?

public class Hello 
{ 
    public static void main(String[] args) 
    { 
     Character arr=65; 
     Integer a='A'; 
     if(arr==a) //Compilation Error,shows Incompatible types Integer and Character 
      System.out.println("True"); 
    } 
} 

yazarsanız

public class Generic 
{ 
    public static void main(String[] args) 
    { 
     Character[] arr3={'a','b','c','d','e','f','g'}; 
     Integer a=97; 
     System.out.println(Non_genre.genMethod(a,arr3)); 
    } 
} 

class Non_genre 
{ 
    static<T> boolean genMethod(T x,T[] y) 
    { 
     int flag=0; 
     for(T r:y) 
     { 
      if(r==x) 
       flag++; 
     } 
     if(flag==0) 
      return false; 
     return true; 
    } 
} 

nasıl T Tamsayı sınıfının olması ve T dizisi Karakter sınıfının olabilir Aynı zamanda ve eğer yayınlanmıyorsa, neden yazdırılmıyorsa, ASCII değeri 'a' 97'dir, bu yüzden doğru yazdırılmalıdır.

cevap

6

derleyici o yöntemin gövdesinde

Non_genre.genMethod(a, arr3) 

sizin atıfta bulunmasına tip argüman olarak Object infers Çünkü

static <T> boolean genMethod(T x, T[] y) { 

senin tipin parametresi T sınırsız olduğunu ve bu yüzden sadece görülebilir Object olarak.

x ve y öğelerinin öğeleri aynı türden (T) olduğundan, yalnızca iyi bir şekilde karşılaştırılabilir.

if (r == x) 
+0

* Nesne değerlerini diğer Nesne değerleriyle karşılaştırabilirsiniz *. Bu biraz yanlış geliyor. Olması gereken * Birbirinizle olan referansları birbiriyle karşılaştırabilirsiniz * – CKing

+0

@ Sotirios-Ama her bir döngüde T'nin türü ne olacak ve neden baskı yanlış? –

+1

@RajMalhotra '==' kullandığınız için. Bu kimlik için değil, eşitliği kontrol eder. – CKing