package com.levelup.java.guava;
import static org.junit.Assert.assertEquals;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.google.common.base.Objects;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.MutableClassToInstanceMap;
/**
* This java example will demonstrate a use case for ClassToInstanceMap.
*
* In many cases you need to gather multiple objects that relate to each other. You may make
* 1:M db calls to get a set of objects, make web service requests, etc. For instance,
* lets say you have a person, a person has addresses, a person has jobs.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/guava-classtoinstancemap-example/'>ClassToInstanceMap Example</a>
*
*/
public class ClassToInstanceMapExample {
private static final Logger logger = Logger.getLogger(ClassToInstanceMapExample.class);
class Person {
private String name;
public Person(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("name", name)
.toString();
}
}
class Jobs {
private String jobName;
public Jobs(String jobName) {
super();
this.jobName = jobName;
}
public String getJobName() {
return jobName;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("jobName", jobName)
.toString();
}
}
class Address {
private String streetName;
public Address(String streetName) {
super();
this.streetName = streetName;
}
public String getStreetName() {
return streetName;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("streetName", streetName)
.toString();
}
}
@Test
public void classToINstanceMap_example () {
Person person = new Person("Jackson");
Jobs jobs = new Jobs("IT person");
Address address = new Address("505 Williams Street");
ClassToInstanceMap<Object> classToInstanceMap = MutableClassToInstanceMap.create();
classToInstanceMap.put(Person.class, person);
classToInstanceMap.put(Jobs.class, jobs);
classToInstanceMap.put(Address.class, address);
logger.info(classToInstanceMap);
assertEquals("IT person", classToInstanceMap.getInstance(Jobs.class).getJobName());
}
}