SORU
13 NİSAN 2009, PAZARTESİ


Java Birden Fazla Sınıflar İle Joker Karakteri Jenerik

Bir Sınıf nesnesi olmak istiyorum, ama Bir sınıf genişletmek ve arayüz B. uygulamak için temsil gücü ne olursa olsun istiyorum

Yapabileceğim:

Class<? extends ClassA>

Ya da:

Class<? extends InterfaceB>

ama ikisini aynı anda yapamam. Bunu yapmanın bir yolu var mı?

CEVAP
13 NİSAN 2009, PAZARTESİ


Aslında sanaolabilirne yapmak istiyorsan yap. Eğer birden çok arabirimi veya sınıf artı bir arayüzleri sağlamak istiyorsanız, joker şöyle bir şey var:

<T extends ClassA & InterfaceB>

Sun.com, Bounded Type Parameters bölümüne özellikle Generics Tutorial, Bu sayfanın altındaki bakın. Aslında ihtiyacın olursa, her biri için & InterfaceName kullanarak isterseniz birden fazla arabirim listeleyebilirsiniz.

Bu keyfi karmaşık olabiliyor. Göstermek için, hangi Collections#max: JavaDoc bildirimi bakın

public static <T extends Object & Comparable<? super T>> T
                                           max(Collection<? extends T> coll)

neden bu kadar karmaşık? Java Jenerik SSS dediği gibi: To preserve binary compatibility.

Bu değişken tanımlaması için çalışmıyor gibi görünüyor, ama bir sınıf üzerinde genel bir sınır koymak zaman işe yarıyor. Bu nedenle, ne istediğinizi yapmak için, birkaç çemberin içinden atlamak zorunda kalabilirsiniz. Ama bunu yapabilirsiniz. Böyle bir şey, kendi sınıf ve sonra da genel bir sınır koyarak yapabilirsiniz:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    Class<T> variable;
}

variable bunu almak zorunda istediğiniz kısıtlama. Daha fazla bilgi ve örnekler için Generics in Java 5.0 sayfa 3'e bak. Not <T extends B & C> sınıf adı her şeyden önce gelir, ve ARAYÜZLERİ izleyin. Ve tabii ki sadece tek bir sınıf listeleyebilirsiniz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • George McCarron

    George McCar

    29 Mayıs 2013
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • Wild Academy

    Wild Academy

    8 Aralık 2009