泛型类,泛型方法的使用
泛型类,泛型方法的使用
传递入对象类型,返回出对象类型都是泛型
接口
public interface CloudParamGetter<IN, OUT> {
OUT get(IN in);
}
实现
public class VmParamGetter implements CloudParamGetter<FamaVm, InstanceSpec> {
@Override
public InstanceSpec get(FamaVm vm) {
InstanceSpec spec = new InstanceSpec();
spec.setAz(vm.getAz());
spec.setName(vm.getName());
spec.setInstanceType(vm.getInstanceType());
JsonArray json = vm.getTagJson();
List<Tag> tagSpecs = Lists.newArrayList();
for (JsonElement element : json) {
JsonObject obj = element.getAsJsonObject();
for (String s : obj.keySet()) {
String v = obj.get(s).getAsString();
Tag tag = new Tag();
tag.setKey(s);
tag.setValue(v);
tagSpecs.add(tag);
}
}
spec.setUserTags(tagSpecs);
InstanceDiskAttachmentSpec systemDisk = new InstanceDiskAttachmentSpec();
int diskSize = vm.getDiskSize();
if (diskSize <= 50) {
systemDisk.setDiskCategory("local");
} else {
systemDisk.setDiskCategory("cloud");
}
systemDisk.setAutoDelete(true);
DiskSpec diskSpec = new DiskSpec();
diskSpec.setAz(vm.getAz());
diskSpec.setDiskType(vm.getDiskType());
diskSpec.setName(buildDiskName(vm.getAppEnName()));
diskSpec.setDiskSizeGB(vm.getDiskSize());
systemDisk.setCloudDiskSpec(diskSpec);
spec.setSystemDisk(systemDisk);
spec.setImageId(vm.getImageId());
InstanceNetworkInterfaceAttachmentSpec primaryNetworkInterface = new InstanceNetworkInterfaceAttachmentSpec();
NetworkInterfaceSpec networkInterface = new NetworkInterfaceSpec();
networkInterface.setSubnetId(vm.getSubnetId());
primaryNetworkInterface.setNetworkInterface(networkInterface);
spec.setPrimaryNetworkInterface(primaryNetworkInterface);
if (vm.getEnvType() == EnvType.TEST) {
spec.setPassword("Focus2!_+");
}
return spec;
}
public String buildDiskName(String appEnName){
String diskName = "DISK-" + appEnName.replace(".","_");
if (diskName.length() <= 32){
return diskName;
}
return diskName.substring(0,32);
}
}
泛型方法用于解析http返回值
protected <T> T parseData(ResponseEntity<String> response, Class<T> dataType) {
Map<String, Object> responseData = JSON.parseObject(response.getBody(), new TypeReference<Map<String, Object>>() {
});
T t = JSON.parseObject(responseData.get(DATA).toString(), dataType);
return t;
}
protected <T> List<T> parseArray(ResponseEntity<String> response, Class<T> dataType){
Map<String, Object> responseData = JSON.parseObject(response.getBody(), new TypeReference<Map<String, Object>>() {
});
List<T> list = JSON.parseArray(responseData.get(DATA).toString(), dataType);
return list;
}
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示