Java 地图<;类别<>;,对象>;登记处

Java 地图<;类别<>;,对象>;登记处,java,generics,collections,guava,Java,Generics,Collections,Guava,我需要把测试值放在一个类中,就像这个简化的例子: import java.util.List; import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class TestVal { private static Map<Class<?>, Object> dummyValues = Maps.newHashM

我需要把测试值放在一个类中,就像这个简化的例子:

import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class TestVal {
  private static Map<Class<?>, Object> dummyValues = Maps.newHashMap();
  static {
    dummyValues.put(String.class, "Banana");
    dummyValues.put(Integer.class, 42);
  }
  @SuppressWarnings("unchecked")
  static final <T> T ofType(Class<T> type) {
    return (T) dummyValues.get(type);
  }
  public static void main(String[] args) {
    List<? extends Object> list =
        Lists.newArrayList(ofType(String.class), ofType(Integer.class));
    for (Object object : list) {
      System.out.printf("%s: %s%n", object, object.getClass().getName());
    }
  }
}
因此,作为一个“基本”系统,它是很好的

不过我想要更多的类型安全

我试着研究番石榴的
不可变的classtoinstancemap
,但是。。。我觉得有点难,看看这个方法签名:

public static
    <B, S extends B>
        ImmutableClassToInstanceMap<B>
            copyOf(
                Map<? extends Class<? extends S>,
                ? extends S> map
            )
公共静态
ImmutableClassToInstanceMap
副本(

映射Eh?使用
ImmutableClassToInstanceMap
所需要做的就是

ImmutableClassToInstanceMap<Object> map = ImmutableClassToInstanceMap
  .builder()
  .put(String.class, "foo")
  .put(Integer.class, 42)
  .build();
ImmutableClassToInstanceMap=ImmutableClassToInstanceMap
.builder()
.put(String.class,“foo”)
.put(Integer.class,42)
.build();
然后您只需调用
map.getInstance(String.class)
即可得到
字符串


copyOf()
上的泛型很复杂,但却是必需的,但是在这种情况下,您几乎肯定只需要使用生成器即可。

呃?使用
ImmutableClassToInstanceMap
所需要做的就是

ImmutableClassToInstanceMap<Object> map = ImmutableClassToInstanceMap
  .builder()
  .put(String.class, "foo")
  .put(Integer.class, 42)
  .build();
ImmutableClassToInstanceMap=ImmutableClassToInstanceMap
.builder()
.put(String.class,“foo”)
.put(Integer.class,42)
.build();
然后您只需调用
map.getInstance(String.class)
即可得到
字符串


copyOf()上的泛型
虽然复杂但必要,但在这种情况下,你几乎肯定会想用生成器来代替。

毫无疑问,你的代码质量很高,我自己也是个傻瓜,因为我不理解它……但是……在维基上多举些例子怎么样?只是想与全世界分享你的一些酷酷,想实际解释一下吗(简略地说:)那一行发生了什么?特别是,为什么你在ImmutableClassToInstanceMap的末尾没有明确使用,我可以看到(我在这里的视野很窄)。让我投票给你,仅仅因为番石榴的绝对魅力,我非常感谢!!我的“猜测”是,“也许”有时人们希望明确映射将包含的类对象的上限,以便在从(现在已类型化的)bucket中提取实例时更“类型安全”?是的
B
只是
ClassToInstanceMap
中存储的类型的上限。我在中添加了更多解释。您确实实时扩展了wiki?见鬼,伙计。。。太神奇了。。。(!!!)毫无疑问,您的代码是高质量的,我自己就是一个不理解它的傀儡。。。但是维基上有更多的例子吗?只是想和全世界分享一下你的酷酷,想不想解释一下(简单地说:)这一行发生了什么?特别是,为什么你在ImmutableClassToInstanceMap的末尾没有明确使用,我可以看到(我在这里的视野很窄)。让我投票给你,仅仅因为番石榴的绝对魅力,我非常感谢!!我的“猜测”是,“也许”有时人们希望明确映射将包含的类对象的上限,以便在从(现在已类型化的)bucket中提取实例时更“类型安全”?是的
B
只是
ClassToInstanceMap
中存储的类型的上限。我在中添加了更多解释。您确实实时扩展了wiki?见鬼,伙计。。。太神奇了。。。(!!!)