Java 静态接口变量
Java static interface variable
java 中的 static
变量有问题。
我正在制作一个在线游戏,我提供了两种与服务器通信的方法。
对于每种通信方式,我都创建了不同的 class 它们都实现了相同的接口。应用程序启动后,用户可以选择通信机制。
为了使这个工作,我创建了一个 static
接口变量,并在用户选择通信方法后分配值,但我想避免 static
字段,什么是最好的方法是什么?
代码如下:
我已经在主体中声明了它 class
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.
因为一个用户可能会选择通信机制,所以你需要使用enum
这是正确的选择,看here。因此,您可以在 enum
类型中定义所有通信模式,并提示用户选择一种。例如,
public enum Communication {
CHOICE1, CHOICE2
}
我认为您需要在代码中添加一些设计以实现低耦合解决方案(ConnectionContext.INSTANCE.getConnector().someMethod(); 绝对不是可行的方法)。
我的建议是使用方法委托。像这样:
public enum ConnectionContext {
INSTANCE;
private Connector connector;
public void setConnectionMode(Connector connector){
this.connector=connector;
}
//Method Delegation
public Double someMethod() {
return this.connector.someMethod();
}
}
通过这样做,您封装了对连接的所有访问,因为您的应用程序根本不关心这些。您只是将外部方法集中在处理 ConnectionContext class 上,它通过委托公开了连接器方法。
希望对您有所帮助
java 中的 static
变量有问题。
我正在制作一个在线游戏,我提供了两种与服务器通信的方法。
对于每种通信方式,我都创建了不同的 class 它们都实现了相同的接口。应用程序启动后,用户可以选择通信机制。
为了使这个工作,我创建了一个 static
接口变量,并在用户选择通信方法后分配值,但我想避免 static
字段,什么是最好的方法是什么?
代码如下:
我已经在主体中声明了它 class
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.
因为一个用户可能会选择通信机制,所以你需要使用enum
这是正确的选择,看here。因此,您可以在 enum
类型中定义所有通信模式,并提示用户选择一种。例如,
public enum Communication {
CHOICE1, CHOICE2
}
我认为您需要在代码中添加一些设计以实现低耦合解决方案(ConnectionContext.INSTANCE.getConnector().someMethod(); 绝对不是可行的方法)。
我的建议是使用方法委托。像这样:
public enum ConnectionContext {
INSTANCE;
private Connector connector;
public void setConnectionMode(Connector connector){
this.connector=connector;
}
//Method Delegation
public Double someMethod() {
return this.connector.someMethod();
}
}
通过这样做,您封装了对连接的所有访问,因为您的应用程序根本不关心这些。您只是将外部方法集中在处理 ConnectionContext class 上,它通过委托公开了连接器方法。
希望对您有所帮助