背景:
当前,我正在尝试创建两个任务运算符。 SettingOperator类和MessageOperator类。下面,我提供了两个类的学习背景。
我的SettingOperator的目的-创建播放器首选项,例如普通的桌面应用程序,并将它们存储到data文件夹中的文件中。这些首选项可以通过播放器命令,配置文件等进行更新。
我的MessageOperator的目的-处理日志记录的本地化消息并配置插件的当前语言环境(只要插件当前支持该语言环境,否则默认为英语)。
问题:
目前,我正在onEnable()方法上初始化两个运算符
private static PluginName instance;
private SettingOperator setting;
private MessageOperator message;
@Override
public void onEnable() {
instance = this;
// TASK OPERATORS
setting = new SettingOperator(this);
message = new MessageOperator(this);
}
/* CLASS INSTANCES */
@Contract (pure = true)
public static AdminConsole getInstance() {
return instance;
}
public static SettingOperator getSettingOP() {
return setting;
}
public static MessageOperator getMessageOP() {
return message;
}
然后,我试图调用对这两个类的引用,因为两者可以互换使用。
*** These Classes Are Into Separate Files, but for the sake of easy readability, I put them in one code block ***
public class SettingOperator {
private final MessageOperator message = PluginName.getMessageOP();
}
public class MessageOperator {
private final SettingOperator message = PluginName.getSettingOP();
}
题:
是否有更好的方法来执行此操作,因为我倾向于捕获溢出异常并且不告诉我它引起了什么类型的问题?任何帮助都将受到赞赏,并且希望得到一些建设性的批评。
最佳答案
使用事件监听器。
这是主意。
public interface PropertyChangeListener {
void onPropertyChanged(Object source, String propertyName, String propertyValue);
}
public class SettingOperator implements PropertyChangeListener {
private PropertyChangeListener listener;
public void setPropertyChangeListener(PropertyChangeListener listener){
this.listener = listener;
}
public void onPropertyChanged(Object source, String propertyName, String propertyValue) {
if(!Objects.equal(getProperty(key), value)) {
setProperty(key, value);
}
}
public void setSetting(String key, String value){
properties.setProperty(key, value);
listener.onPropertyChanged(this, key, value);
}
}
public class MessageOperator implements PropertyChangeListener {
private PropertyChangeListener listener;
public void setPropertyChangeListener(PropertyChangeListener listener){
this.listener = listener;
}
public void onPropertyChanged(Object source, String propertyName, String propertyValue) {
consoleLog("Property Set)";
}
public void setLocale(String key, String value){
listener.onPropertyChanged(this, key, value);
}
}
public void onEnable() {
instance = this;
// TASK OPERATORS
setting = new SettingOperator(this);
message = new MessageOperator(this);
setting.setPropertyChangeListener(message);
message.setPropertyChangeListener(setting);
}
您可以扩展方法
onPropertyChanged
并使用一些bean作为事件而不是String。另外,您可以扩展它并向类添加一个或多个侦听器。但是想法是一样的。