我正在尝试创建一个 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;
}
}
NewClass 看起来像这样:
package Demo;
public class NewClass0 {
Integer MyNumber;
NewClass0(int num){
MyNumber=num;
}
public Integer getMyNumber() {
return MyNumber;
}
}
除了数字(即 0、1 和 2)之外,所有 NewClass 都是相同的。
最佳答案
为了使用 Class.forName()
方法加载类,您必须指定完全限定的包名称。例如,在本例中,它必须是 Demo.NewClass0
。
关于java - 如何创建动态调用其他 Java 类的 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768694/