有的时候,你的map的key并不是一种类型,他们是很多类型,你想通过映射他们得到这种类型,guava提供了ClassToInstanceMap满足了这个目的。 除了继承自Map接口,ClassToInstaceMap提供了方法 T getInstance(Class ) 和 T putInstance(Class , T),消除了强制类型转换。 该类有一个简单类型的参数,通常称为B,代表了map控制的上层绑定。guava提供了有用的实现, MutableClassToInstanceMap 和 ImmutableClassToInstanceMap。
示例:
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.MutableClassToInstanceMap;
import org.junit.Test;
/**
* @author Kevin
* @description
* @date 2016/8/5
*/
public class ClassToInstanceMapTest {
@Test
public void classToInstanceMapTest() {
ClassToInstanceMap classToInstanceMap = MutableClassToInstanceMap.create();
Teacher teacher = new Teacher("Kevin", 28);
Stu stu = new Stu("Han", 1);
classToInstanceMap.putInstance(Teacher.class, teacher);
classToInstanceMap.putInstance(Stu.class, stu);
System.out.println(classToInstanceMap.getInstance(Teacher.class));
System.out.println(classToInstanceMap.getInstance(Stu.class));
}
}
abstract class Person{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
class Teacher extends Person {
public Teacher(String name, int age) {
super(name, age);
}
}
class Stu extends Person {
public Stu(String name, int age) {
super(name, age);
}
}