2009-03-04 21 views
1

Yani (benim giriş noktası sınıfta sağlar ki, yani program public static void main(String args[]) işlevi vardır ki (başladığında çalışan sınıfı) bu sınıfın ben bu değişkeni var.Java sınıfları Giriş sınıfından nasıl bilgi alır?

private ArrayList<String> myData=new ArrayList<String>(); 

Bu sınıf başka sınıfını başlatır giriş noktası sınıfının myData üyesi erişmesini ihtiyacı olan bu arraylist alabilirsiniz nasıl

Edit:.? açıklığa kavuşturmak için, main() yönteminde bunu yapabilirdi:

SomeOtherClass myClass=new SomeOtherClass(); 

ve sonra yapabileceği:

myClass.someMethod(); 

Ancak myClass nesnede, nasıl bir yöntem gerçekleştirebilir

/ myClass nesne örneği giriş sınıfı, bir şeyler almak?

cevap

2

: gibi

Örneğin, nesne yapıcı bakacağız . Statik dünyadan ve örneklere taşınmanız gerekir.

Ana yönteminizi özel bir oluşturucuya yeniden yerleştirir ve yeni bir örnek olarak yeni bir ana() yerleştiririm.

Bu kodun çok kaba olduğunu unutmayın, ancak yapmanız gereken şeyi göstermek için hizmet etmelidir.

public class EntryPoint { 
    private ArrayList<String> myData=new ArrayList<String>(); 

    public static void main(String[] args) { 
     EntryPoint ep = new EntryPoint(); 
     ep.init(); 
    } 

    private void init() { 
     // Populate myData perhaps? 

     SomeOtherClass myClass=new SomeOtherClass(); 
     myClass.someMethod(this); 
    } 

    public List<String> getMyData() { 
     return myData; 
    } 
} 

public class SomeOtherClass { 
    public void someMethod(EntryPoint entry) { 
     List<String> data = entry.getMyData(); 
     // do stuff with data..! 
    } 
} 
+0

Genelde, EntryPoint kurucusunda someMethod() öğesini kişisel olarak çağırmaktan kaçınırım. Belki bir doWork() yöntemi veya bir şey ekleyin? –

+0

Eh evet. Zor olduğunu söyledim! – banjollity

+0

Aslında, nesne henüz tam olarak oluşturulmadığından, "bu" öğesini bir kurucudan güvenli bir şekilde geçiremezsiniz. Bu, hataları takip etmeyi zorlaştırabilir. Bu durumda _might_ çalışır, ancak kırıldığı başka birçok durum vardır. – TofuBeer

1

main()'u içeren sınıf, sıradan bir sınıftır. Sizin durumunuzda, myDatapublic ve muhtemelen static yapmalısınız (ya da elbette bir erişimci ekleyin). Tıpkı başka bir sınıfta olduğu gibi.

Ayrıca şu şekilde diğer sınıfa bir Entry nesneyi geçebileceği: Eğer yapıcı içine geçmek olacaktır myData erişimi örneğini sınıfı vermek

public static void main(String[] args) { 
    Entry entry = new Entry(); 
    SomeOtherClass myClass=new SomeOtherClass(entry); 
    // continue as before 
} 
+0

Kapsülleme önemli! – banjollity

+0

Yep. Soru, ArrayList'in başka bir yerde kullanılıyorsa, giriş sınıfında olmasının nedeni, ancak buna değinmem. –

2

iyi yolu o oluşturulduğunda . Daha sonra, yapıcınızda, ArrayList sınıfının bir üye değişkenine kaydedebilirsiniz. O da başka bir sınıf çağırdığında giriş noktası hala statik gibi geliyor, ama ArrayList bunun bir örneği üyesidir

private ArrayList<String> myData; 

public YourObjConstructor(ArrayList<String> data){ 
    myData = data; 
} 
İlgili konular