作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以将嵌套的泛型/捕获绑定(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/
我是一名优秀的程序员,十分优秀!