作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以有多个返回类型,这些返回类型由方法中的枚举参数给出。
例如:
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/
我是一名优秀的程序员,十分优秀!