如何创建动态调用其他Java类的HashMap?

时间:2014-07-15 21:41:19

标签: java

我正在尝试创建HashMap<Integer, Class>,但我没有成功。基本上,我想要做的就是能够动态地将类加载到Map中。

我的托管Bean看起来像这样:

package Demo;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.inject.Named;

/**
 *
 * @author kbarnett
 */
@Named(value = "facePalmBean")
@Dependent
public class FacePalmBean {

    private HashMap<Integer, Class> chimpanzee;
    private NewClass0 NewClass0;
    private NewClass1 NewClass1;
    private NewClass2 NewClass2;

    /**
     * Creates a new instance of FacePalmBean
     */
    public FacePalmBean() {

        chimpanzee = new HashMap<>();
        NewClass0 = new NewClass0(0);
        NewClass1 = new NewClass1(1);
        NewClass2 = new NewClass2(2);

    }

    public HashMap<Integer, Class> getChimpanzee() {
        for (int i = 0; i < 3; i++) {
            try {
                String tmpstring = "NewClass"+i;
                System.out.println(tmpstring);
                Class tmpclass = Class.forName(tmpstring);
                System.out.println(tmpclass);
                chimpanzee.put(i, tmpclass);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(FacePalmBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println(chimpanzee.toString());
        return chimpanzee;
    }

    public void setChimpanzee(HashMap<Integer,Class> chimpanzee) {
        this.chimpanzee=chimpanzee;
    }


}

并且NewClasses看起来像这样:

package Demo;


public class NewClass0 {
        Integer MyNumber;

    NewClass0(int num){
        MyNumber=num;
    }

    public Integer getMyNumber() {
        return MyNumber;
    }
}

除了数字(即0,1和2)之外,所有NewClasses都是相同的。

1 个答案:

答案 0 :(得分:2)

要使用Class.forName()方法加载类,必须指定完全限定的包名称。在这种情况下,它必须是Demo.NewClass0,例如。