【发布时间】:2016-12-02 08:38:11
【问题描述】:
我在 java 中遇到了 static 变量的问题。
我正在制作一个在线游戏,我提供了两种与服务器通信的方法。
对于每种通信方式,我创建了一个不同的类,它们都实现了相同的接口。在应用程序启动后,用户可以选择通信机制。
为了完成这项工作,我创建了接口的static 变量,并在用户选择通信方式后分配值,但我想避免static 字段,最好的方法是什么?
代码如下:
我在主类中声明了它
public class Main extends Application {
public static Connector connector;
}
之后取决于用户的选择:
private void connectWithServer()
{
String hostValue = serverTextField.getText();
switch (serverComboBox.getSelectionModel().getSelectedIndex())
{
case 0:
Main.connector=new KryoConnector("127.0.0.1");
break;
case 1:
Main.connector=new RMIConnector("127.0.0.1");
break;
case 2:
Main.connector=new KryoConnector(hostValue);
break;
case 3:
Main.connector=new RMIConnector(hostValue);
break;
}
}
后来我这样调用方法:
Main.connector.createBoard(this);
我浏览了答案,我想到了这样的事情:
public enum ConnectionContext {
INSTANCE;
private Connector connector;
public void setConnector(Connector connector)
{
this.connector=connector;
}
public Connector getConnector()
{
return connector;
}
}
然后我会这样调用它的方法:
ConnectionContext.INSTANCE.getConnector().someMethod();
这样我可以避免静态,但无论如何可以以更短的方式引用它?因为之前我只有 Main.connector。
【问题讨论】:
-
接口值是CONSTANT,你的意思是抽象类吗?
-
听起来像是状态设计模式的标准用例
-
我在我的一个类(主)中声明了类似的东西:公共静态连接器连接器;然后后来我有这样的事情:案例2:Main.connector=new KryoConnector(hostValue);休息;案例 3:Main.connector=new RMIConnector(hostValue);休息;
标签: java static singleton global-variables field