簡體   English   中英

如何用有效的東西替換Java中的“ this”

[英]How do I replace “this” in Java with something that works

我正在尋找showGUI()方法的工作,編譯器說“ this”不是靜態變量,不能從靜態上下文中引用,我將用什么代替“ this”? 我試過test.main(測試是它所在的包)。 我使用靜態方法showGUI()的原因是,我需要從另一個靜態方法以及startup()方法中調用該方法。 以下是我的兩個主要課程。

public class Main extends SingleFrameApplication {

    @Override protected void startup() {
        showGUI();
    }

    @Override protected void configureWindow(java.awt.Window root) {
    }

    public static Main getApplication() {
        return Application.getInstance(Main.class);
    }

    public static void main(String[] args) {
       launch(Main.class, args);

    }

    public static void showGUI() {
        show(new GUI(this));
    }
}

public class GUI extends FrameView {

    public GUI(SingleFrameApplication app) {
        super(app);
        initComponents();
    }
    private void initComponents() {
        //all the GUI stuff is somehow defined here
    }
}

那么,使用this在靜態方法是沒有意義的。 this指的是類的特定實例,但是static表示這是不需要實例的方法,因此它無法訪問任何成員變量或方法。

只需將showGUI非靜態即可。

public void showGUI() {
    show(new GUI(this));
}

如果需要this傳遞給另一個函數(例如GUI構造函數),則需要一個對象,並且showGUI最好保留為非靜態方法:

@Override protected void startup() {
    showGUI();
}

public void showGUI() {
    show(new GUI(this));
}

如果確實需要靜態方法,則需要一個對象來處理:

public static void createApplicationAndShowGUI() {
    Main main = getApplication();
    show(new GUI(main));
}

甚至更好:

public static void createApplicationAndShowGUI() {
    Main main = getApplication();
    main.startup();
}

甚至更好的是,不要創建任何靜態方法:

// in your context outside of the Main object
Main main = Main.getApplication();
main.showGUI();

“這”的意思是“當前對象”。 在靜態方法中,沒有當前對象。 在你的榜樣,嘗試更換thisnew Main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM