2011-07-04 19 views
21

से विधियों तक कैसे पहुंचें मैंने जितना संभव हो सके मेरी परिस्थिति को सरल बनाने की कोशिश की।जावा: किसी अन्य वर्ग

अल्फा:: मैं तीन वर्गों है

public class Alpha { 
    public void DoSomethingAlpha() { 
      cbeta.DoSomethingBeta() //? 
    } 
} 

बीटा:

public class Beta { 
    public void DoSomethingBeta() { 
      // Something 
    } 
} 

मुख्य:

public class MainApp { 
    public static void main(String[] args) {   
      Alpha cAlpha = new Alpha(); 
      Beta cBeta = new Beta(); 
    } 
} 

मुझे आशा है कि मैं इसे सरल नहीं था। मेरा सवाल यह है कि मैं अल्फा में एक विधि से cBeta.DoSomethingBeta() तक कैसे पहुंच सकता हूं?

+0

आप निश्चित रूप से यह oversimplified है। अल्फा के पास cbeta का कोई संदर्भ नहीं है, DoSomethingBeta को कन्स्ट्रक्टर की तरह परिभाषित किया गया है, आदि। वास्तव में आपके लिए क्या काम नहीं कर रहा है? – g051051

उत्तर

27

आपको क्लास अल्फा को सीबीटा का संदर्भ देने की आवश्यकता है। ऐसा करने के तीन तरीके हैं।

1) निर्माता को अल्फा को बीटा दें।

public class Alpha { 
    private Beta beta; 
    public Alpha(Beta beta) { 
    this.beta = beta; 
    } 

और फोन cAlpha = मुख्य से नए अल्फा (cBeta)()

2) Alphas एक mutator है कि उन्हें एक बीटा देता दे: वर्ग अल्फा लिखने में।कक्षा अल्फा में लिखें:

public class Alpha { 
    private Beta beta; 
    public void setBeta (Beta newBeta) { 
    this.beta = beta; 
    } 

और कॉल एल्फा = नया अल्फा(); cAlpha.setBeta (बीटा); मुख्य(), या

3) एक बीटा को SomethingAlpha करने के लिए एक तर्क के रूप में है। कक्षा अल्फा में लिखें:

public void DoSomethingAlpha(Beta cBeta) { 
     cbeta.DoSomethingBeta() 
} 

आप जिस रणनीति का उपयोग करते हैं वह कुछ चीजों पर निर्भर करता है। यदि आप प्रत्येक अल्फा को बीटा रखने के लिए चाहते हैं, तो नंबर 1 का उपयोग करें। यदि आप बीटा रखने के लिए केवल कुछ अल्फा चाहते हैं, लेकिन आप चाहते हैं कि वे अपने बीटा को अनिश्चित काल तक पकड़ें, तो नंबर 2 का उपयोग करें। यदि आप अल्फा को केवल बीटा से निपटना चाहते हैं जबकि आप doSomethingAlpha को कॉल कर रहे हैं, नंबर 3 का उपयोग करें। परिवर्तनीय दायरा पहले जटिल है, लेकिन जब आप इसे लटकते हैं तो यह आसान हो जाता है। यदि आपको और प्रश्न पूछने हों तो मुझे बता दें!

+0

धन्यवाद, मुझे नहीं लगता कि तीसरा व्यक्ति मेरे मामले में काम करने जा रहा है, लेकिन नंबर 1 को काम करना चाहिए। मुझे यह रखना चाहिए था, लेकिन दोनों "अल्फा" और "बीटा" अलग-अलग जेएफआरम्स बनाते थे। "अल्फा" में एक चेकबॉक्स है, जिसे "बीटा" को यह पता होना चाहिए कि यह चेक किया गया है या नहीं। – co757

0

आप या तो अल्फा कक्षा में प्रकार बीटा की एक वस्तु या उसके विधि

बनाने के लिए की तरह आप मुख्य बीटा cBeta = नई बीटा में यहाँ कर() की जरूरत है;

आप

public class Alpha 
{ 

    Beta localInstance; 

    public Alpha(Beta _beta) 
    { 
     localInstance = _beta; 
    } 


    public void DoSomethingAlpha() 
    { 
      localInstance.DoSomethingAlpha();  
    } 
} 
0

तरह अल्फा निर्माता नज़र बनाकर चर आप अपने मुख्य में बनाने का उपयोग करने के तो आप है cAlpha के लिए यह एक पैरामीटर के रूप पार्स करने के लिए चाहते हैं, तो हो सकता है आप कुछ dependency injection

public class Alpha { 

    private Beta cbeta; 

    public Alpha(Beta beta) { 
     this.cbeta = beta; 
    } 

    public void DoSomethingAlpha() { 
     this.cbeta.DoSomethingBeta(); 
    } 
} 
की जरूरत

और फिर

Alpha cAlpha = new Alpha(new Beta()); 
14

विधि 1:

Beta.DoSomethingBeta(); 

विधि 2:

तो विधि DoSomethingBeta स्थिर था आप केवल फोन की जरूरत है

अल्फा बीटा से फैली हुई है, तो आप कह सकते हैं DoSomethingBeta() सीधे।

public class Alpha extends Beta{ 
    public void DoSomethingAlpha() { 
      DoSomethingBeta(); //? 
    } 
} 

विधि 3:

वैकल्पिक रूप से आप इसे से तरीकों कॉल करने के लिए बीटा का एक उदाहरण के लिए उपयोग की आवश्यकता है।

public class Alpha { 
    public void DoSomethingAlpha() { 
      Beta cbeta = new Beta(); 
      cbeta.DoSomethingBeta(); //? 
    } 
} 

संयोग से यह होमवर्क है?

0
public class WeatherResponse { 

private int cod; 
private String base; 
private Weather main; 

public int getCod(){ 
    return this.cod; 
} 

public void setCod(int cod){ 
    this.cod = cod; 
} 

public String getBase(){ 
    return base; 
} 

public void setBase(String base){ 
    this.base = base; 
} 

public Weather getWeather() { 
    return main; 
} 

// default constructor, getters and setters 
} 

अन्य वर्ग

public class Weather { 

private int id; 
private String main; 
private String description; 

public String getMain(){ 
    return main; 
} 

public void setMain(String main){ 
    this.main = main; 
} 

public String getDescription(){ 
    return description; 
} 

public void setDescription(String description){ 
    this.description = description; 
} 

// default constructor, getters and setters 
} 

// तक पहुँचने के तरीकों
// सफलता!

Log.i("App", weatherResponse.getBase()); 
    Log.i("App", weatherResponse.getWeather().getMain()); 
    Log.i("App", weatherResponse.getWeather().getDescription()); 
0

मेरे पास एक और समाधान है। यदि अल्फा और बीटा आपकी एकमात्र अतिरिक्त कक्षा है तो कक्षा की छवि के साथ एक स्थिर चर क्यों न बनाएं।

अल्फा की तरह वर्ग:

public class Alpha{ 
     public static Alpha alpha; 
     public Alpha(){ 
       this.alpha = this; 
} 

अब तुम तुम सिर्फ इन लाइनों का उपयोग करके बीटा कक्षा में समारोह कॉल कर सकते हैं:

new Alpha(); 
Alpha.alpha.DoSomethingAlpha(); 
संबंधित मुद्दे