2011-04-04 8 views
7

Sadece SCJP book yöntem-yerel iç sınıfları ile ilgili bölüm üzerinden okudum ve gerçekten onlar için herhangi bir pratik kullanım düşünmek için mücadele ediyorum.Yöntem yerel yerel sınıflar Java'da ne gibi fayda sağlar?

Hep yöntemler yüzden bile heft ve hantal yöntemler yaratacak en basit iç sınıf tanıtan, (Orthogonality IIRC) olabildiğince kendi görevi olarak küçük ve spesifik olması gerektiğini, izlenimi altında oldum.

kimse yöntemi lokal iç sınıflar için iyi bir pratik kullanım önerebilir misiniz? Şimdiye kadar, sadece sınavı geçmek için onları anlayabilmem ve günlük kodlamada kullanılmamam gerektiği gibi hissediyor.

Alkış

+0

Genellikle geri çağırma yöntemlerini uygulamak için kullanılırlar. – helpermethod

+0

Onları sadece bir kez kullandım: Bir yöntemde geçici bir HashMap için uygun bir anahtar sınıfına ihtiyacım vardı. – Landei

+0

Gerçek dünya yöntemi yerel iç mekan kullanımı burada: http://stackoverflow.com/a/14900700/82609 –

cevap

11

(örneğin aksiyon dinleyicileri, runnables ve bu tür için) yerine yöntemi yerel adlandırılmış sınıfların anonim sınıfları kullanırsınız.

Ama sınıflar yapabilir ve anonim sınıflar olamaz adında tek bir şey vardır: çok birden fazla arabirim uygulama veya bir sınıf ve arayüzler uzanan. Ayrıca, bu sınıfın birden fazla nesnesini oluşturabilirsiniz (bir döngü kullanmadan).

+0

"Ayrıca, bu sınıfın birden fazla nesnesini oluşturabilirsiniz (bir döngü kullanmadan)." - Emin olabilirsin. Sınıfı tanımlayan yöntemin birden fazla çağrısında bile, sınıf hala aynıdır. –

1

Yerel sınıflar ebeveyn sınıfının dışına mantığı alıp nesnelleştirmek sağlar. Bu, ait olmadığı yerden işlevselliği kaldırır ve kendi sınıfına yerleştirir. Ancak, bu yeni nesne sadece kısa bir süre için, sadece tek bir kod bloğu süresince gerekliyse ne olur? Yerel bir sınıf sığar nerede olduğunu bu.

3

daha iyi kapsülleme fayda olduğunu söyleyebilirim. Eğer "işlevsel" operasyonları yapmaya çalışıyor, ya da daha sonra çağrılacak başka bir nesneye kod geçirmeden zaman

2

Yöntem lokal iç sınıflar yararlıdır. Çoğu durumda, bu tür sınıflar sadece bir kez çağrılır veya kullanılır, bu yüzden başka bir yerde tanımlamaya gerek yoktur ve okuyucuyu bunun için avlanmaya zorlar. Java'nın gelecekteki sürümlerinin, bu tür iç sınıflar için çoğu durumda "kapanma" ile değiştirilmesi muhtemeldir. Eğer başka bir yöntemini çağıran bir olay dinleyicisi yazarken veya yeni bir konu başlatmak zaman

Ortak durumlardır.

+0

Yöntem-yerel adlı sınıflar yerine anonim sınıfları kullanan sınıflar daha iyidir. – Raedwald

0

Ben Runnable Konuya geçirilen uygulama düşünüyorum:

Thread t = new Thread(new Runnable() { 
    void run() { 
     ... 
    } 
}); 

Bu anonim sınıfın ve herhangi anonim sınıf yanı iç olduğunu. Çoğu durumda

+1

ancak runnable bir yöntem yerel iç sınıf değil (düz bir anonim iç sınıftır) – Chii