gpt4 book ai didi

java - 是否可以绑定(bind)嵌套泛型?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:57:48 25 4
gpt4 key购买 nike

是否可以将嵌套的泛型/捕获绑定(bind)在一起?

我经常遇到这样的问题:将类映射查找到所述类的泛化项。具体来说,我想要这样的东西(不,T 没有在任何地方声明)。

private Map<Class<T>, ServiceLoader<T>> loaders = Maps.newHashMap();

简而言之,我希望 loaders.put/get 具有如下语义:

<T> ServiceLoader<T> get(Class<T> klass) {...}
<T> void put(Class<T> klass, ServiceLoader<T> loader) {...}

以下是我能做的最好的吗?我是否必须忍受不可避免的 @SuppressWarnings("unchecked")

private Map<Class<?>, ServiceLoader<?>> loaders = Maps.newHashMap();

最佳答案

让我看看我是否明白您的意图:您想要一个存储成对的 Class 的 map 。/ServiceLoader其中每对由相同的参数化 T ,但是 T对之间可能不同?

如果是这种情况,那么最好的解决方案是声明您自己的类,该类将展示这样的接口(interface)。在内部,它将这些对存储在一个通用的 Map<Class<?>,ServiceLoader<?>> 中。 map 。

public class MyMap {
private Map<Class<?>, ServiceLoader<?>> loaders
= new HashMaps<Class<?>, ServiceLoader<?>>();

public<T> void put(Class<T> key, ServiceLoader<T> value) {
loaders.put(key, value);
}

@SuppressWarnings("unchecked")
public<T> T get(Class<T> key) { return (ServiceLoader<T>) loaders.get(key); }
}

@SuppressWarnings("unchecked")注释不是纯粹的邪恶。您应该尽量避免使用它们,但在某些情况下您可以确定转换是正确的,尽管编译器看不到这一点。

关于java - 是否可以绑定(bind)嵌套泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2583555/

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