2009-10-01 26 views
12

Bir yazılım geliştirici pozisyonu için bu röportaja gittim ve genellikle 4 seçenek seçeneği ile bazı köşe-durum kodu durumlarında bir test verdiler.
Sınıf kapsamı dışında bir enum bildirilen sorulardan biri, derhal "derleme" yanıtını kontrol ettim ve diğer sorulara devam ettim.Enum, sınıf kapsamı dışında bildirildi

enum Colors {BLUE,RED,GREEN} 

class Test { 
    //other code, not really important with my question 
} 

Bu kod aslında derler: Bu gibi bir şey oldu.
Bunun gibi bir röportajın (belki de) iyi bir geliştirici olup olmadığını öğrenmek için yararlı olmayabileceği gerçeğinin yanı sıra, beni endişelendiren şey: neden böyle bir enum bildireyim? Neden bunu sadece enum ile yapabilirim? Bazı testler yaptım ve sınıf içinde göründüğünü ancak diğer sınıflara göre olmadığını gördüm.

Sidenote: Gerçekten fakir saydım: P. Teoriyi aldım ama köşe-vaka-kodu durumlarında en düşük olasılıkla yaklaştım. İşi alacağımı sanmıyorum.

+3

Bu sadece bir dosya içinde, aynı ad alanında diğer sınıflara görünür olacaktır. BCL'deki çoğu ders, bir sınıfın dışında, sağladığınız örnekte olduğu gibi (kamuya açık olmaları dışında) beyan edilir. Öyleyse soru şu ki * siz böyle bir enum ilan etmiyorsunuz *? – Groo

+0

Birisi java erişim denetimi ile çalışıp çalışmadığını kontrol etmek için yararlıdır ve sınıflar, genel sınıf A sınıfının% 100'ü değildir {özel Dize alanı; Genel yöntem() {}} varsayılan olarak. –

+0

@Groo: Evet, –

cevap

10

Sadece çeteleler değil. Enumlar sadece özel sınıf türleridir. Genel olarak, bir dosyada bildirilen birden fazla sinifiniz olabilir (bunlardan ikisi kamuya açık olmadığı sürece).

+0

Ve sınıf dosya adı serbestçe seçilebilir (örneğin, örnek için MyClass.java). –

+0

"Enumlar sadece özel sınıf türleri" pasajını tamamen özledim, bunun akılda tutulması mantıklı. –

+0

Aslında bu, sınıflar için çalışıyor (sadece enumlar değil). –

0

Aslında benim Eclipse'imde derler! ;-)

Aynı dosyada çeşitli sınıfların olmasına izin verilir. Sınırlama, bir genel sınıfın aynı ada sahip bir dosyada tanımlanması gerektiğidir.

Görünürlük 'paket' dir, bu nedenle aynı paketteki diğer sınıflarda da görünmelidir.

O enum ile neler yapabilirsiniz?

Sen yukarıdaki sınırlamalar ile istediğiniz her şeyi yapabilir

...

Not: Eğer gerçekten iyi bir uygulamadırçünkü yanlış, sen de kötü hissetme olmasına rağmen ya. Bizim CheckStyle yapılandırmasında, bu gibi aynı dosyadaki dış sınıflar hata olarak kabul edilir!

+1

elbette derler. Bence OP bunu derlediğini farketti (ama bu konuda net değildi) – newacct

+0

Evet, biliyorum, sorumu açıklığa kavuşturmalıyım. –

6

Hayır, bir erişim düzenleyici olmadan, enum paket özeldir. Bu, yalnızca aynı paket içindeki sınıflar tarafından kullanılabileceği anlamına gelir. Ve bunu sadece bir enum ile yapamazsınız, sınıflar da paket-özel yapılabilir.

diğer bilgiler:

+1

Yansımanın uzun kolunu göz ardı etmek. – kenny

+0

@Kenny, çok doğru! ;) –

1

http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html Bazen bu deyim mantıklı olabilir - örneğin, bir yükleme işleminden gelen bir durum dönebilirsiniz (veya böyle bir şey) bir UploadHandler sınıf var düşünün. Bu durumu bir enum olarak uygulamak benim için oldukça uygun görünüyor - ve enum (ör. UploadStatus) açıkça UploadHandler sınıfına "ait" olduğundan, aynı kaynak dosyasında bildirmek iyi görünüyor. (Tabii ki, bunun sadece paket-özel olması gerektiğine inanıyor - eğer gerçekten açıksa, kendi dosyasında bildirilmesi gerekecek, ki bu artık içsel bir şey değilse, muhtemelen mantıklı olacaktır).

O sırada da, bu durumda muhtemelen o ilişki daha açık hale getirmek için statik bir iç sınıf yapar. Ancak aynı kaynak dosyasında birden fazla sınıfın bildirilmesi her zaman kötü değildir ve bazen bunun sınır-önemsiz, yardımcı bir sınıf olduğu beklentisini belirleyerek okunabilirliğe yardımcı olabilir.(Aynı şekilde, böyle sınıfları özellikle karmaşık veya beklenmeyen bir şey yapmak gerektiğini düşünüyorum.)

0

Bir enum belirli bir türde atanabilir sabit değerlerin bir listesini belirtir. Sınıfın içinde veya dışında olabilir.