gpt4 book ai didi

java - 在静态内部类中使用静态变量

转载 作者:行者123 更新时间:2023-12-02 05:55:05 30 4
gpt4 key购买 nike

我有一个具有静态内部类的类。外部类想要使用静态内部类中的变量。问题是如果我使用实例变量,我需要实例化内部类。所以,我决定使用静态变量。这与OOP的概念相悖吗?如果是这样,我是否应该遵循任何其他原则或我应该使用任何设计模式来做同样的事情?

我使用静态类的原因是我想为 Android Activity 创建一个自定义构建器。问题是我无法使用构造函数来初始化扩展 Activity 的 OuterClass。因此,我需要在 onCreate() 方法中加载这些静态变量。

这是我的示例代码

public class DialogFactory extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));

setContentView(R.layout.activity_custom_dialog);
this.setDialogTitle(Builder.title);
this.setDialogMessage(Builder.message);
this.loadButtons();
}

public void onClick(View view) {
switch (view.getId()) {
case R.id.dialog_positive_button:
Builder.callable.onClickButton(Builder.type, DialogEventListener.ButtonType.POSITIVE_BUTTON);
this.finish();
break;
case R.id.dialog_neutral_button:
Builder.callable.onClickButton(Builder.type, DialogEventListener.ButtonType.NEUTRAL_BUTTON);
this.finish();
break;
case R.id.dialog_negative_button:
Builder.callable.onClickButton(Builder.type, DialogEventListener.ButtonType.NEGATIVE_BUTTON);
this.finish();
break;
}
}

private void setDialogTitle(String title) {
TextView view = (TextView) findViewById(R.id.dialog_title);
view.setText(title);
}

private void setDialogMessage(String message) {
TextView view = (TextView) findViewById(R.id.dialog_message);
view.setText(message);
}

private void loadButtons() {
Button positiveButton = (Button) findViewById(R.id.dialog_positive_button);
Button negativeButton = (Button) findViewById(R.id.dialog_negative_button);
Button neutralButton = (Button) findViewById(R.id.dialog_neutral_button);
positiveButton.setVisibility(View.GONE);
negativeButton.setVisibility(View.GONE);
neutralButton.setVisibility(View.GONE);

for (Map.Entry<DialogEventListener.ButtonType, String> entry: Builder.buttons.entrySet()) {
if (entry.getKey() == DialogEventListener.ButtonType.POSITIVE_BUTTON) {
positiveButton.setVisibility(View.VISIBLE);
positiveButton.setText(entry.getValue());
}
else if (entry.getKey() == DialogEventListener.ButtonType.NEGATIVE_BUTTON) {
negativeButton.setVisibility(View.VISIBLE);
negativeButton.setText(entry.getValue());
}
else if (entry.getKey() == DialogEventListener.ButtonType.NEUTRAL_BUTTON) {
neutralButton.setVisibility(View.VISIBLE);
negativeButton.setText(entry.getValue());
}
}
}

@Override
public void onBackPressed() {
//
}

public static final class Builder {
private static DialogEventListener callable;
private static DialogEventListener.DialogType type;
private static String title;
private static String message;
private Context context;
private static Map<DialogEventListener.ButtonType, String> buttons;

public Builder(Context context, DialogEventListener callable,
DialogEventListener.DialogType dialogType, String title, String message) {
Builder.callable = callable;
Builder.type = dialogType;
Builder.title = title;
Builder.message = message;
this.context = context;
Builder.buttons = new HashMap<DialogEventListener.ButtonType, String>();

}

public Intent build() {
return new Intent(this.context, DialogFactory.class);
}

public void addButton(DialogEventListener.ButtonType buttonType, String label) {
Builder.buttons.put(buttonType, label);
}
}
}

最佳答案

查看您的代码后,我发现了多个问题。首先,Builder类中的构造函数用得较少。并且使用类名访问构建器类的所有属性(将它们声明为静态)将为您提供未初始化的引用,并将导致空指针异常。

我不完全理解您的 Builder 类的用途,但如果可能的话,尝试创建一个单独的类来处理创建和初始化。之后在activity类中创建Builder类的实例,使用构造函数注入(inject)依赖,并尝试使用builder类中的函数来执行进一步的操作。

关于java - 在静态内部类中使用静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23182643/

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