SORU
11 Kasım 2008, Salı


Dönem "kanonik form" veya "kurallı bir temsil" Java ne demek?

Genellikle bu terimin kullanıldığını duymuştum, ama hiç anlamadım.

Nasıl bir şeydir ve herkes bazı bağlantılar için/bazı örnekler verebilirsiniz?

EDİT: cevaplar için herkese Teşekkürler. Ayrıca, kanonik gösterimi eşittir yararlı olduğunu nasıl söyleyebilir misin() Etkili Java belirtildiği gibi performans?

CEVAP
12 Aralık 2008, Cuma


Kurallı iki kullanan ilgili olduğuna inanıyorum: formlar ve örnekleri.

Birkanonik formukaynağın belirli bir tür değerler veya birden çok şekilde tarif temsil edilebilir anlamına gelir, ve bu yollardan birini tercih kurallı biçimi olarak seçilir. (Bu formAziz ilan edildiİncil'e göre bu yüzden kitap gibi, ve diğer formları vardır.) Kurallı bir form klasik bir örnek, tek bir dosya yolla başvurulabilir nerede hiyerarşik dosya sistemi: yollar

myFile.txt                                   # in current working dir
../conf/myFile.txt                           # relative to the CWD
/apps/tomcat/conf/myFile.txt                 # absolute path using symbolic links
/u1/local/apps/tomcat-5.5.1/conf/myFile.txt  # absolute path with no symlinks

Bu dosya kurallı gösterimi klasik tanım son yol olacaktır. Yerel ya da göreli yolları ile küresel bağlamsal bilgi olmadan kaynak tanımlayamıyor. Mutlak yollar ile kaynak tanımlayabilirsiniz, ancak eğer iki yol aynı varlığı işaret varsa söyle. İki veya daha fazla yol kanonik formlarını çevrilmiş, tüm yukarıda yapabilirsiniz, ayrıca eğer bu uygulama (Çöz . için önemliyse eğer iki kaynak aynı olup olmadığını belirlemek, ^em>aliasing sorunu).

Not kanonik formun bir kaynak değildir bir kalite bu özel form; olabilir birden çok olası kanonik formlar için belirli bir türü gibi dosya yolları (lexicographically öncelikle Olası mutlak yol). Bir form herkes aynı dili konuşuyor, böylece belirli bir uygulama nedenle kanonik formu, ya da belki de keyfi olarak seçilir.

Kendi içine nesneleri zorlayarakkurallı örnekleriaynı temel fikir, ama yerine belirleyen bir "en iyi" temsil bir kaynak, keyfi olarak seçtiği bir örneği bir sınıf örneği ile aynı "içerik" olarak kanonik referans, dönüştürür tüm başvurular eşdeğer nesneleri kullanmak için bir klasik örneği.

Bu hem zaman hem de uzay optimize etmek için bir teknik olarak kullanılabilir. Varsa birden çok örneğini eşdeğer nesneleri bir uygulama, o zamana kadar zorlayarak hepsini olmak çözülmüş olarak tek kurallı örneği belirli bir değeri, ortadan bir her değer, tasarruf alanı ve muhtemelen zamandan beri artık karşılaştırmak bu değerler ile referans kimliği (==) yerine nesne denklik (equals() yöntem).

Kurallı örnekleri ile performansını en üst düzeye klasik bir örnek, aynı içerikli dizeleri çöküyor. Aynı karakter dizisi ile iki dizeleri String.intern() arama metin için aynı kurallı bir Dize nesne iade garantilidir. Eğer bu canonicalizer ile tüm dizeleri geçirirseniz, eşdeğer dizeleri aslında nesne başvurularını, yani, takma adları aynı

Java 5.0 numaralama numaralama türleri belirli bir değeri tüm örnekler eğer değeri seri hale ve Serisi bile bir VM içinde aynı kurallı örneği kullanmak, zorlamak. Eğer Days numaralandırma türü ise java dokunulmazlığa sahip if (day == Days.SUNDAY) kullanabilirsiniz nedeni budur. Kendi sınıfları için bu işi kesinlikle mümkün, ama halleder. OkuyunEtkili Javabilgi ve tavsiye için Bloch Josh tarafından.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Huot Media

    Huot Media

    7 Mayıs 2010
  • KIT KAT

    KIT KAT

    3 EKİM 2005