class Pet {
String m_name;
public Pet(String name) {
m_name = name;
}
public Pet() {
}
}
class Mutt extends Pet {
public Mutt(String name) {
super(name);
}
public Mutt(){}
}
class Pug extends Pet {
public Pug(String name) { super(name); }
public Pug(){}
}
class Manx extends Pet {
public Manx(String name) { super(name); }
public Manx(){}
}
abstract class PetCreator {
Random rand = new Random();
public abstract List<Class<? extends Pet>> types();
public Pet randomPet() {
int n = rand.nextInt(types().size());
try {
return types().get(n).newInstance();
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
public Pet[] creatArray(int size) {
Pet[] rst = new Pet[size];
for (int i = 0; i < size; ++i)
rst[i] = randomPet();
return rst;
}
}
class LiteralPetCreator extends PetCreator {
static final List<Class<? extends Pet>> types = Arrays.asList(Mutt.class, Pug.class, Manx.class);
static final List<Class<? extends Pet>> alltypes = Arrays.asList(Pet.class, Mutt.class, Pug.class, Manx.class);
public List<Class<? extends Pet>> types(){
return types;
}
}
class PetCount3 {
static class PetCounter extends LinkedHashMap<Class<? extends Pet>, Integer> {
public PetCounter () {
for( Class<? extends Pet> c: LiteralPetCreator.alltypes ) {
put(c, 0);
}
}
public void count(Pet pet) {
for ( Map.Entry<Class<? extends Pet>, Integer> pair : entrySet()) {
if(pair.getKey().isInstance(pet)) {
put(pair.getKey(), pair.getValue() + 1);
}
}
}
public String toString() {
StringBuilder sb = new StringBuilder("{");
for( Map.Entry<Class<? extends Pet>, Integer> pair : entrySet()) {
sb.append(pair.getKey().getSimpleName());
sb.append("=");
sb.append(pair.getValue());
sb.append(", ");
}
sb.delete(sb.length()-2, sb.length());
sb.append("}");
return sb.toString();
}
}
}
public class tt {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PetCount3.PetCounter cnt = new PetCount3.PetCounter();
for (Pet p : new LiteralPetCreator().creatArray(20)) {
System.out.print(p.getClass().getSimpleName() + " ");
cnt.count(p);
}
System.out.println();
System.out.println(cnt);
}
}
Mutt Pug Mutt Mutt Manx Mutt Mutt Pug Mutt Mutt Mutt Mutt Pug Manx Manx Pug Pug Mutt Manx Mutt
{Pet=20, Mutt=11, Pug=5, Manx=4}