gpt4 book ai didi

Java:枚举的不同返回类型

转载 作者:行者123 更新时间:2023-11-30 01:46:46 26 4
gpt4 key购买 nike

我想知道是否可以有多个返回类型,这些返回类型由方法中的枚举参数给出。

例如:

public <T extends ICloudServer> T startServer(ServerType type) {
...
}

如果服务器类型是PROXY,我想返回一个ProxyServer,如果服务器类型是MINECRAFT,我想返回一个MinecraftServer。

有没有办法用Java来实现这一点?

最佳答案

让服务器实现ICloudServer接口(interface),并在ServerType枚举中添加start方法作为服务器启动策略方法。不同的服务器有不同的配置和启动过程。

class Minecraft implements ICloudServer{

//ctor
Minecraft(ServerConfig cfg){
//ctor implementations
}

//Other implementation details
}

public enum ServerType {

MINECRAFT {
@Override
public ICloudServer start(ServerConfig cfg ) {
//Apply config for minecraft
Minecraft server = new Minecraft(cfg.port()).username(cfg.username()).password(cfg.password()).done();
//Start minecraft server
server.start();
return server;
}
},

PROXY {
@Override
public ICloudServer start(ServerConfig cfg) {
//Apply config and start proxy server
ProxyServer server = new ProxyServer(cfg);
return server;
}
};
public abstract ICloudServer start(ServerConfig port) throws Exception;
}

正如 @JB Nizet 提到的,将 startServer 方法返回类型更改为 ICloudServer 并简单地调用 ServerType#start(ServerConfig cfg) 来启动服务器.

public ICloudServer startServer(ServerType type) {  

try{
return type.start(new ServerConfig());
}catch(Exception ex){
//log exception
}

throw new ServerStartException("failed to start server");
}

关于Java:枚举的不同返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57646642/

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