[英]Java: How to access methods from another class
我試圖盡可能簡化我的困境。 我有三個班級:
Α:
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();
}
}
我希望我沒有過度簡化它。 我的問題是如何從 Alpha 中的方法訪問 cBeta.DoSomethingBeta()?
您需要以某種方式為 class Alpha 提供對 cBeta 的引用。 有三種方法可以做到這一點。
1) 在構造函數中給 Alphas 一個 Beta。 在 class Alpha 中寫入:
public class Alpha {
private Beta beta;
public Alpha(Beta beta) {
this.beta = beta;
}
並從 main() 調用 cAlpha = new Alpha(cBeta)
2)給Alphas一個mutator,給他們一個beta。 在 class Alpha 中寫入:
public class Alpha {
private Beta beta;
public void setBeta (Beta newBeta) {
this.beta = beta;
}
並調用 cAlpha = new Alpha(); cAlpha.setBeta(beta); 從 main(),或
3) 有一個 beta 作為 doSomethingAlpha 的參數。 在 class 阿爾法寫:
public void DoSomethingAlpha(Beta cBeta) {
cbeta.DoSomethingBeta()
}
您使用哪種策略取決於幾件事。 如果您希望每個 Alpha 都有一個 Beta,請使用數字 1。如果您希望只有一些 Alpha 擁有一個 Beta,但您希望他們無限期地持有他們的 Beta,請使用數字 2。如果您希望 Alpha 只處理 Beta當您調用 doSomethingAlpha 時,請使用數字 3。變量 scope 起初很復雜,但當您掌握它時會變得更容易。 如果您還有其他問題,請告訴我!
方法一:
如果 DoSomethingBeta 方法是 static 你只需要調用:
Beta.DoSomethingBeta();
方法二:
如果 Alpha 從 Beta 擴展而來,您可以直接調用 DoSomethingBeta()。
public class Alpha extends Beta{
public void DoSomethingAlpha() {
DoSomethingBeta(); //?
}
}
方法三:
或者,您需要訪問 Beta 實例才能從中調用方法。
public class Alpha {
public void DoSomethingAlpha() {
Beta cbeta = new Beta();
cbeta.DoSomethingBeta(); //?
}
}
順便說一句,這是作業嗎?
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());
我有另一個解決方案。 如果 Alpha 和 Beta 是您唯一的額外 class 那么為什么不使用 class 的圖像創建一個 static 變量。
就像在阿爾法 class 中一樣:
public class Alpha{
public static Alpha alpha;
public Alpha(){
this.alpha = this;
}
現在您可以使用以下幾行代碼在 Beta class 中調用 function:
new Alpha();
Alpha.alpha.DoSomethingAlpha();
您需要在 Alpha class 或其方法中創建一個 Beta 類型的 object
就像您在 Main Beta 中所做的那樣 cBeta = new Beta();
如果要使用在 Main 中創建的變量,則必須通過使 Alpha 構造函數看起來像將其解析為 cAlpha 作為參數
public class Alpha
{
Beta localInstance;
public Alpha(Beta _beta)
{
localInstance = _beta;
}
public void DoSomethingAlpha()
{
localInstance.DoSomethingAlpha();
}
}
也許你需要一些依賴注入
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.