public class TestClass{ public static void main(String[] args){ String s=new String("Str"); try{ String o=(String)Class.forName(s).newInstance(); System.out.println(o); } catch(Exception e){ e.printStackTrace(); } } } 怎么报找不到类的错误?
public class Test1 { public Test1(){ System.out.println("Test1"); } public void showTest(){ System.out.println("showTest();"); } public void showTest2(String s,String y){ System.out.println(s+":"+y); } }import java.lang.reflect.*;public class TestMain { public TestMain(){
System.out.println("TestMain();"); } public static void main(String[] args){ String classNm = "Test1"; String methodNm = "showTest2"; try{ Class clazz = Class.forName(classNm); Method method = clazz.getMethod(methodNm, new Class[] {Class.forName("java.lang.String"),Class.forName("java.lang.String")}); // get method with no arguments; Object obj = clazz.newInstance(); method.invoke(obj, new Object[]{"xxxx","yyyy"}); // invoke the method on that specific intance }catch(Exception e){ System.out.println(e.getMessage()); } } } 可以了
String s="StringBuffer";Object o=Class.forName(s).newInstance();这个o就是StringBuffer的对象了
------
后面使用的时候强制转换!
再是根据s值对应的值生成一个相对应的新类,至于这个类的操作,我会在另外的地方定义,来用的现在是怎样生成这个类的问题
现在得到Object,可是我不能o.getName()呀!
何必在麻烦地通过其他办法得到这个名字呢?不过也可以啊
Class c=Class.forName("StringBuffer");
String name=c.getName();
我不是要得到这个名字,我是要这个类
------------
既然是知道的,那就强制转换刚才的Object就可以了啊
A a=new A();
a.doSomthing()String s="B"
B b=new B();
b.doSomhting1();但是知道的是Sting 中的值,不能"StringBuffer" s=new "StringBuffer",一定要StringBuffer s=new StringBuffer();
要得到这个类,一般用于调用其中的方法
简单的方式是这个类实现一个接口或继承一个父类interface AAA{
public void doSomething();
}AAA a = (AAA)Class.forName("SomeClass").newInstance();
a.doSomething();
public static void main(String[] args){
String s=new String("Str");
try{
String o=(String)Class.forName(s).newInstance();
System.out.println(o);
}
catch(Exception e){
e.printStackTrace();
}
}
}
怎么报找不到类的错误?
{
public Test1(){
System.out.println("Test1");
} public void showTest(){
System.out.println("showTest();");
} public void showTest2(String s,String y){
System.out.println(s+":"+y);
}
}import java.lang.reflect.*;public class TestMain
{
public TestMain(){
System.out.println("TestMain();");
} public static void main(String[] args){
String classNm = "Test1";
String methodNm = "showTest2";
try{
Class clazz = Class.forName(classNm);
Method method = clazz.getMethod(methodNm, new Class[] {Class.forName("java.lang.String"),Class.forName("java.lang.String")}); // get method with no arguments;
Object obj = clazz.newInstance();
method.invoke(obj, new Object[]{"xxxx","yyyy"}); // invoke the method on that specific intance
}catch(Exception e){
System.out.println(e.getMessage());
}
}
} 可以了