gpt4 book ai didi

java - 我应该为我的主程序变量使用静态变量吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:51 28 4
gpt4 key购买 nike

我读过这方面的帖子,所以我知道应该如何避免静态变量,它们不是面向对象的,它们就像全局变量等。

但这是我的问题,希望它不是重复的:我有一些私有(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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com