Java: toegang krijgen tot methoden uit een andere klasse

Ik heb geprobeerd mijn hachelijke situatie zo veel mogelijk te vereenvoudigen. Ik heb drie klassen:

Alfa:

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

Bèta:

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

Hoofd:

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

Ik hoop dat ik het niet te simpel heb gemaakt. Mijn vraag is hoe krijg ik toegang tot cBeta.DoSomethingBeta() vanuit een methode in Alpha?


Antwoord 1, autoriteit 100%

Je moet op de een of andere manier klasse Alpha een verwijzing naar cBeta geven. Er zijn drie manieren om dit te doen.

1) Geef Alfa’s een bèta in de constructor. Schrijf in de klas Alpha:

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

en bel cAlpha = new Alpha(cBeta) vanuit main()

2) Alfa’s een mutator geven die hen een bèta geeft. Schrijf in de klas Alpha:

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

en bel cAlpha = new Alpha(); cAlpha.setBeta(bèta); van main(), of

3) hebben een bèta als argument om iets alfa te doen. schrijf in de klas Alpha:

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

Welke strategie je gebruikt, hangt af van een paar dingen. Als u wilt dat elke afzonderlijke alfa een bèta heeft, gebruik dan nummer 1. Als u wilt dat slechts enkele alfa’s een bèta hebben, maar u wilt dat ze hun bèta voor onbepaalde tijd behouden, gebruik dan nummer 2. Als u wilt dat alfa’s alleen met bèta’s werken terwijl je doSomethingAlpha belt, gebruik je nummer 3. Variabel bereik is in het begin ingewikkeld, maar het wordt gemakkelijker als je het onder de knie hebt. Laat het me weten als je nog vragen hebt!


Antwoord 2, autoriteit 56%

Methode 1:

Als de methode DoSomethingBeta statisch was, hoef je alleen maar aan te roepen:

Beta.DoSomethingBeta();

Methode 2:

Als Alpha zich voortzet vanaf Beta, kun je DoSomethingBeta() rechtstreeks aanroepen.

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

Methode 3:

Als alternatief moet u toegang hebben tot een Bèta-instantie om de methoden ervan aan te roepen.

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

Is dit trouwens huiswerk?


Antwoord 3

Misschien heb je wat afhankelijkheidsinjectie

nodig

public class Alpha {
    private Beta cbeta;
    public Alpha(Beta beta) {
        this.cbeta = beta;
    }
    public void DoSomethingAlpha() {
        this.cbeta.DoSomethingBeta();
    }
}

en dan

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

Antwoord 4

Je moet ofwel een object van het type Beta maken in de Alpha-klasse of de methode ervan

Zoals hier in de hoofdbèta cBeta = nieuwe bèta();

Als u de variabele wilt gebruiken die u in uw Main maakt, moet u deze naar cAlpha als parameter ontleden door de Alpha-constructor er als volgt uit te laten zien

public class Alpha 
{
    Beta localInstance;
    public Alpha(Beta _beta)
    {
        localInstance = _beta;
    }
     public void DoSomethingAlpha() 
     {
          localInstance.DoSomethingAlpha();     
     }
}

Antwoord 5

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
}

nog een les

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
}

// toegang tot methoden
// succes!

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

Antwoord 6

Ik heb een andere oplossing. Als Alpha en Beta je enige extra klasse zijn, waarom maak je dan geen statische variabele met de afbeelding van de klasse.

Zoals in de Alpha-klasse:

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

Nu kun je de functie in de Beta-klasse aanroepen door deze regels te gebruiken:

new Alpha();
Alpha.alpha.DoSomethingAlpha();

Other episodes