- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我读过这方面的帖子,所以我知道应该如何避免静态变量,它们不是面向对象的,它们就像全局变量等。
但这是我的问题,希望它不是重复的:我有一些私有(private)类变量,许多方法使用这些变量并四处传递会很乏味。我正在谈论的类(class)是我的主要程序, 所以它的唯一实例将是 JVM 创建的实例。
在这种情况下,这些变量是否是静态的会有什么区别吗? (也许如果用户多次打开我的应用程序并且我将变量设为静态,他们会共享变量并相互混淆?)
我想使用静态变量,因为我想从枚举内部访问这些变量。谢谢
这是枚举部分的代码:
enum Buttons {
OPEN_BUTTON("Open file...",false),
CHANGE_FONT_BUTTON("Change font",false),
DECOR_BUTTON("Decor font",true),
EDITOR_BUTTON("Open editor",false),
ALPHABET_BUTTON("Open alphabet browser",false),
CTEST_BUTTON("Start consonant test",false),
TESTTYPE_BUTTON("Select test type...",false),
TEST_BUTTON("Start word test",false),
QUIT_BUTTON("Quit", false);
private ButtonBase button;
Buttons(String title, boolean toggle) {
if (toggle) button = ToggleButtonBuilder.create().prefWidth(200).prefHeight(35).text(title).build();
else button = ButtonBuilder.create().prefWidth(200).prefHeight(35).text(title).build();}
void onClick(EventHandler<MouseEvent> eh) {button.setOnMouseClicked(eh);}
ButtonBase getBase() {return button;}
boolean toggled() { return ((ToggleButton)button).isSelected(); }
void setToggle(boolean on) {((ToggleButton) button).setSelected(on); }
void enable() {button.setDisable(false);}
void disable() {button.setDisable(true);}
void setText(String text) { button.setText(text);}
void clicked() {
//这是我想要事件处理程序的地方...
最佳答案
你说:
I'm using JavaFx and I'm making my Buttons into an enum, and I'd like to add the ActionEvent (click) handler inside the enum, so it's all neatly in one place. The handlers need to access the class variables.
这不是一个好的设计,不是静态变量的原因,也是对枚举的误用。您正在通过这种设计放弃 OOP 的所有好处,因此我强烈建议您不要这样做。请注意,如果/当您更新或修改代码时,您通常会更改 GUI 组件,而枚举应该(几乎)永远不会更改。它们应该代表你逻辑的不 rebase 石。它们不应该用于状态改变的对象,就像你的按钮当前所做的那样。
我在这里也建议不要使用单例模式,因为不需要将其用于 GUI 组件(事实上,单例与枚举非常相似)。为什么不简单地创建一个 View 类?
关于java - 我应该为我的主程序变量使用静态变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304914/
我有一个主程序X,它从我的网络摄像头获取数据。 我想在执行时实时配置 X。 我知道这样做的常见方法之一是使用IPC,如命名管道/Unix套接字/互联网套接字等。但我想避免每个调用者必须单独打开套接字/
信号可以在任何线程或主程序本身中接收。我从主程序创建了一个辅助线程。所以我的程序中有两个线程 1. 主线程(进程本身) 2. 辅助线程。我只希望每当信号到达我的辅助线程时,它应该向我的主线程(程序)发
我在 java 中有一个主类,它调用 JFrame Two。 但在调用 JFrame Two 之前,我的主要检查一个条件,如果为真,则调用 JFrame One。 所以,我的 main 不扩展 JFr
我正在尝试编译一个 C++ 程序,但它不起作用。首先,我应该说 c++ 不是我真正了解的语言,我使用 Fortran。无论如何,主要的 c++ 程序调用一个 fortran 子例程。我可以编译这个子例
我正在尝试将 Rust 绑定(bind)到 nbdkit,但运气不佳。我需要制作一个 .so 文件,这很简单。 .so 文件必须有一个名为 plugin_init 的公共(public)函数,这也很简
QT 似乎是最好的跨平台 GUI 工具包。不幸的是,它是在 C++ 中,它与许多有趣的语言(例如 *nix 上的 D、Rust、Julia 和 Mono)的绑定(bind)要么不可用,要么没有维护。
我有一个 Maven 项目,它在 src 文件夹中的一个包中有 2 个主程序(MyTestApp_A 和 MyTestApp_B)。 如果我打开它们并单击运行按钮,我可以在 Eclipse 中运行这些
我是一名优秀的程序员,十分优秀!