繁体   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