SORU
21 EKİM 2013, PAZARTESİ


Neden T Koleksiyonlarında Nesne ile çevrilidir.() max imza?

Sadece Java uygulaması geçti 7 java.util.Collections sınıf ve gördüm anlamadığım bir şey. max işlev imzası, neden T Object ile çevrilidir?

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
    Iterator<? extends T> i = coll.iterator();
    T candidate = i.next();

    while (i.hasNext()) {
        T next = i.next();
        if (next.compareTo(candidate) > 0)
            candidate = next;
    }
    return candidate;
} 

max Nesneye bağlı atlanmış görünüyor.

public static <T extends Comparable<? super T>> T max(Collection<? extends T> coll) {
    Iterator<? extends T> i = coll.iterator();
    T candidate = i.next();

    while (i.hasNext()) {
        T next = i.next();
        if (next.compareTo(candidate) > 0)
            candidate = next;
    }
    return candidate;
}

Aslında bağlı bir fark olduğu herhangi bir durum var mıdır? Evet ise, lütfen somut bir örnek sağlar.

CEVAP
21 EKİM 2013, PAZARTESİ


İkisi de aynı ama sınırları varince bir fark.

 <T extends Object & Comparable<? super T>> 

Bu T silme altında Object bir olmasına neden olacak.

 <T extends Comparable<? super T>>

Bu T silme altında Comparable olmasına neden olacak.


Bu durumda .max Java 5 öncedir çünkü yapılır. this link Joachim Java 1.4.2 .max imzası olduğunu nazikçe sağlanan görebiliriz:

public static Object max(Collection coll)

Bir bağlı olarak <T extends Comparable<? super T>> kullanmış olsaydık, bizim imza olurdu

public static Comparable max(Collection coll)

API kırabilecek. Genel olanlar için eski API dönüştürme anlatılır this page bulmayı başardım ve spesifik bir örnek olarak .max verir.

Burada max bu şekilde tanımlanır nedenini açıklar:

Ayrıca, gözden geçirilmiş API eski müşteriler ile ikili uyumluluk korumasını sağlamak gerekiyor. Bu API silinmesi özgün, ungenerified API ile aynı olması gerekir anlamına gelir. Çoğu durumda, bu doğal olarak düşer, ama bazı ince durumlar vardır. , 26* *yöntemi karşılaştığımız en davalardan biri inceleyeceğiz. Joker bölümünde Daha Eğlenceli gördüğümüz gibi, max() için makul bir imza

public static <T extends Comparable<? super T>> T max(Collection<T> coll) Bu güzel, bu imzanın silinmesi dışında: max orijinal imza birden public static Comparable max(Collection coll) (): public static Object max(Collection coll)

Kesinlikle max için bu imza belirtmiş olabilir () ama yapıldı ve eski ikili sınıf Koleksiyonlar arama dosyaları.() max döndürür. bir imza bağlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • Just So

    Just So

    3 HAZİRAN 2007
  • SellerDp

    SellerDp

    27 EKİM 2009