JdonJive论坛使用的是这种方法 //动态装载类 Class c = Class.forName(className); factory = (ForumFactory)c.newInstance();
既然你知道了Class for name,new instance,那技术上基本上就是这样了你主要是想知道如何转型,其实很简单,就是cast(用括号)实际情况一般是你反射生成的东西,一般是同一类的东西,比如,最常见的JDBC的java.sql.Driver,不管配置的那个String代表的是具体什么class,但都属于同一接口或抽象类,而你之后的工作,也是围绕这个接口展看的,因此你只需转型到这个接口即可
你要建立的myClass类是否已经定义了?如果已经定义了就涉及不到反射的问题,只要用
Class.forName(String className)就可以返回类className的一个实例。否则就要用到反射的一些知识
cn.forecast.test.Test obj=(cn.forecast.test.Test)Class.forName("cn.forecast.test.Test").newInstance();
System.out.println(obj.getClass().getName());
比如(className)Class.forName(className).newInstance();会出错,现在只能Class.forName(className).newInstance();返回Object,我想知道有没有其他办法返回具体变量名对应的对象?
System.out.println(obj.getClass().getName());
你看看输出的是啥?
import java.lang.reflect.Method;public class RTTI {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Class c=Class.forName("temp.JiaMi");
Constructor[] ctor=c.getConstructors();
for(int i=0;i<ctor.length;i++){
System.out.println(ctor[i]);
}
Method[] m=c.getDeclaredMethods();
for(int i=0;i<m.length;i++){
System.out.println(m[i]);
}
Object b=c.newInstance();
System.out.println(b.getClass().getName());
}catch(Exception e){
e.printStackTrace();
}
}}
这个打出来的是类型是temp.JiaMi,但是怎么调用它的方法呢?
//动态装载类 Class c = Class.forName(className); factory = (ForumFactory)c.newInstance();
factory = (ForumFactory)c.newInstance();中ForumFactory是什么类型的?