- Java code
package c11;import java.util.*; class Pet {} class Dog extends Pet {} class Pug extends Dog {} class Cat extends Pet {} class Rodent extends Pet {} class Gerbil extends Rodent {} class Hamster extends Rodent {} class Counter { int i=1; } public class PetCount { static String[] typenames = { "Pet", "Dog", "Pug","Cat", "Rodent", "Gerbil", "Hamster", }; public static void main(String[] args) { Vector pets = new Vector(); try { Class[] petTypes = { Class.forName("c11.petcount.Dog"), Class.forName("c11.petcount.Pug"), Class.forName("c11.petcount.Cat"), Class.forName("c11.petcount.Rodent"), Class.forName("c11.petcount.Gerbil"), Class.forName("c11.petcount.Hamster"), }; for(int i = 0; i < 15; i++) pets.addElement(petTypes[(int)(Math.random()*petTypes.length)].newInstance()); } catch(InstantiationException e) {} catch(IllegalAccessException e) {} catch(ClassNotFoundException e) {} Hashtable h = new Hashtable(); for(int i =0; i < typenames.length; i++) h.put(typenames[i], new Counter()); for(int i = 0; i < pets.size(); i++) { Object o = pets.elementAt(i); if(o instanceof Pet) ((Counter)h.get("Pet")).i++; if(o instanceof Dog) ((Counter)h.get("Dog")).i++; if(o instanceof Pug) ((Counter)h.get("Pug")).i++; if(o instanceof Cat) ((Counter)h.get("Cat")).i++; if(o instanceof Rodent) ((Counter)h.get("Rodent")).i++; if(o instanceof Gerbil) ((Counter)h.get("Gerbil")).i++; if(o instanceof Hamster) ((Counter)h.get("Hamster")).i++; } for(int i = 0; i < pets.size(); i++) System.out.println( pets.elementAt(i).getClass().toString()); for(int i = 0; i < typenames.length; i++) System.out.println( typenames[i] + " quantity: " + ((Counter)h.get(typenames[i])).i); } }
输出结果是:Pet quantity: 1
Dog quantity: 1
Pug quantity: 1
Cat quantity: 1
Rodent quantity: 1
Gerbil quantity: 1
Hamster quantity: 1
正确的结果应该不可能全是1啊,至少有几个是出现过几次的。问题出在哪里啊?
------解决方案--------------------
如果有问题就是class.forName的问题了
我看你的包名是package c11;
但是里面用的却是c11.petcount.Dog
------解决方案--------------------
再试了一把 确实是class.forName中包名的错误才有下面的结果
Pet quantity: 1
Dog quantity: 1
Pug quantity: 1
Cat quantity: 1
Rodent quantity: 1
Gerbil quantity: 1
Hamster quantity: 1
------解决方案--------------------
原因是下面的代码回抛异常,ClassNotFoundException
- Java code
Class[] petTypes = { Class.forName("c11.petcount.Dog"), Class.forName("c11.petcount.Pug"), Class.forName("c11.petcount.Cat"), Class.forName("c11.petcount.Rodent"), Class.forName("c11.petcount.Gerbil"), Class.forName("c11.petcount.Hamster"),
------解决方案--------------------
- Java code
Class[] petTypes = { Class.forName("c11.Dog"), Class.forName("c11.Pug"), Class.forName("c11.Cat"), Class.forName("c11.Rodent"), Class.forName("c11.Gerbil"), Class.forName("c11.Hamster"),};