gpt4 book ai didi

java - 类型安全服务 getter 类(返回参数化类型)

转载 作者:行者123 更新时间:2023-12-01 14:51:32 25 4
gpt4 key购买 nike

我想获得的是可以安全返回输入类实例的东西。就我而言,被用作服务提供商。代码示例:

 public class MyClass {

private Map<String, Object> mServices;

public MyClass() {
mServices = new HashMap<String, Object>();
mServices.put(XmlService.class.getName(), new XmlService());
}

public <E extends Object> E getService(Class<?> service) {
return (E) mServices.get(service.getName());
}
}

我承认我对参数化类型不太熟练,我在这里需要一些帮助。我没有从 map 中获取对象吗?为什么我需要转换为 E,从而失去类型安全?有没有办法避免强制转换和/或抑制警告?

最佳答案

不,不幸的是,我们无法避免这种额外的沮丧。请注意,您的 map 类型是 Map<String, Object>Object - 这就是 Java 编译器所知道的关于值的全部内容。您必须以某种方式声明映射以具有不同类型的每个键。不可能。

但是你的代码可以简化一点:

public <E> E getService(Class<E> service) {
return (E) mServices.get(service.getName());
}

另一个细微的改进涉及使用 Class作为关键:

private Map<Class<?>, Object> mServices;

public <E> E getService(Class<E> service) {
return (E) mServices.get(service);
}

关于java - 类型安全服务 getter 类(返回参数化类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791794/

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