SORU
17 EKİM 2008, Cuma


Java Numaralama tanımı

Java jenerik çok iyi anladığımı sanmıştım, ama sonra java aşağıdaki rastladım.lang.Sırala:

class Enum<E extends Enum<E>>

Birisi bu tür parametresi yorumlamak için nasıl açıklayabilir? Bonus benzer tipte bir parametre kullanılabilecek diğer örneklerin verilmesi için puan.

CEVAP
17 EKİM 2008, Cuma


Numaralama için tür bağımsız değişkeni aynı tür bağımsız değişkeni kendisi olan bir sıralama elde etmek anlamına gelir. Böyle bir şey nasıl olabilir? Tür bağımsız değişkeni yeni tip kendisi yaparak. Eğer bir numaralama StatusCode adı var, eşdeğer olur:

public class StatusCode extends Enum<StatusCode>

Şimdi ise kısıtlamaları denetleyin, Enum<StatusCode> - E=StatusCode var. Kontrol edelim: E Enum<StatusCode> genişletebilir mi? Evet! Biz iyiyiz.

Olabilir de soruyor kendine ne bu böyle :) demek bu API için Numaralama bakın kendisi - için örnek olacağını söyleyen Enum<E> uygulayan Comparable<E>. Temel sınıf karşılaştırmaları (numaralamalar durumunda) yapmak mümkün ama sadece birbirleriyle çeteleler doğru tür karşılaştırır emin olun. (EDİT: Evet, neredeyse en alt kısmında düzenleme.)

Benim C benzer bir şey kullandım# ProtocolBuffers Limanı. Orada "mesaj" (değişmez) ve "inşaatçılar" (değişken, bir mesaj oluşturmak için kullanılır) - ve çift olarak geliyorlar türleri. Arabirimleri söz konusu:

public interface IBuilder<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

public interface IMessage<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

Bu anlamına gelen bir ileti alabilirsiniz uygun bir builder (örneğin bir kopya bir mesaj ve değişim bazı bit) ve bir builder alabilirsiniz uygun bir mesaj ne zaman sen ettik bitmiş bina. API nerede aslında, korkunç derecede karmaşık ve çeşitli yineleme çektik bu umurunda değil ama gerek yok iyi bir iş.

EDİT: bu tamam kendisi olan bir tür bağımsız değişkeni kullanan, ama aynı tip değil tek tip yapmaktan sizi durdurmak gerekmez. Amaç fayda sağlamakdoğruyerine gelen davayı korumakyanlışdurumda.

Eğer öyleyse Enum "özel" Java zaten, yorumlarda belirtildiği gibi) şu tür oluşturabilirsiniz: işlenmiş olmasaydı

public class First extends Enum<First> {}
public class Second extends Enum<First> {}

Second Comparable<First> yerine Comparable<Second>... First kendisi iyi olurdu uygulayacak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006