:
Yani, doğru Comparable<T>
kullanmak için, böyle bir listeniz birbirine karşılaştırılabilir nesneleri depolayan kısıtlamasını, bir şeyler ifade etmek, jenerik sizin sıralanmış listesini yapmak gerekir Yöntem parametresi olarak Comparable
gibi bir arabirim kullanmanız, sınıfınızı genel yapmaz, bildirir ve genel tür parametrelerini kullanmanız, onu genel olarak nasıl yaptığınızdır.
Hızlı-n-kirli cevap: Eğer Comparable<String>
gibi bir ham türü olarak, genel bir arayüz olan Comparable
kullanarak yerine bunu bir spesifik tip argümanları veriyoruz çünkü uyarı alıyorsunuz.
Bunu düzeltmek tür parametreleri belirterek
add()
jenerik yapmak için:
<T extends Comparable<? super T>> add(T obj) { ... }
Ama bu hızlı düzeltme sınıf güvensiz genel sorunu çözmek olmaz. Sonuçta, listenizdeki tüm nesneler aynı türde olmamalı mı? Bu add
yöntemi, hala farklı türleri aynı listeye girebilmenizi sağlar. Türdeş olmayan türleri karşılaştırmaya çalıştığınızda ne olur (örneğine veya Number
örneğine veya bir String örneğine)? Sınıfın kullanıcısına doğru olanı yapmak için güvenebilirsiniz ve listenizde sadece bir tür şey yaptıklarından emin olabilirsiniz, ancak genel bir sınıf derleyicinin bu kuralı zorlamasına izin verecektir.
iyi bir yaklaşım: uygun düzeltme sizin sıralanmış liste sınıfı muhtemelen sadece java.util
diğer koleksiyon sınıfları gibi, genel jenerik olması gerektiğidir.
Verirsin muhtemelen gibi bir şey gibi: sınıf jenerik olduğunda, add
yöntemin kendine özgü biçimsel türü parametresi ilan ziyade sınıflar biçimsel türü parametresi kullandığı
public class SortedList<T extends Comparable<? super T>>
implements Iterable<T> {
...
public void add(T item) { ... }
public Iterator<T> iterator() { ... }
...
}
Not.
genel bir sınıf oluşturmak için nasıl web üzerinde öğreticiler bol olmalı, ama burada bir örnek aşağıda verilmiştir:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ002
class Pair<X,Y> {
private X first;
private Y second;
public Pair(X a1, Y a2) {
first = a1;
second = a2;
}
public X getFirst() { return first; }
public Y getSecond() { return second; }
public void setFirst(X arg) { first = arg; }
public void setSecond(Y arg) { second = arg; }
}
olmalı 'T super T>' Karşılaştırılabilir uzanır. – ColinD
Eh, daha önce olduğu gibi çalıştı ve çalıştı. – 3mpty