难题:动态加载类如何造型为指定的动态类!!!!!!! 你为什么非要转化成(MyClass)呢?他本来就是MyClass类型的,只不过用一个Object的引用罢了,调用里面的方法没问题呀。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就像String str = "this is a string";Object str_obj = str;System.out.println(str_obj.toString());str_obj虽然是Object但是他指向的是String,所以toString()调用的是String的方法。 问题已经被我解决,用java.lang.reflection可以解决!谢谢各位。qq:7409844 你是说Class.forName()不成功吧,强制转化没有问题啊 如果是动态加载就不能采用强制转换类型这种方法。因为我们并不知道这个类到底是Class到底是什么class。也就说如果你用这些代码:String className="MyClass";Clsss iClass = Class.forName(className);Object iObj =iClass.newInstance();生成了iObj,你确实不能用classname来动态转换。如果要使用这个生成的object应该怎么办呢?我假设你的MyClass如下定义。public class MyClass{ public MyClass(){ } public void sayHello(String who) { System.out.println("hello world "+who); }}如果要动态的使用sayHello,可以用如下代码import java.lang.reflect.*;class TestClass{ public static void main(String[] args) { //这是sayHello的参数类型为String Class[] parameterTypes={String.class}; //准备把you这次字符串传进去 Object[] parameter={"you"}; //以下是动态装入的类名和需要调用的函数名 String className="MyClass"; String methodName="sayHello"; try{ Class iClass=Class.forName(className); //产生一个Method对象(sayHello) Method method=iClass.getMethod(methodName,parameterTypes); //Class.forname只是动态的装入了类,我们还需要产生对象,因此 //需要调用它的构造函数,用以下方法调用 Constructor con=iClass.getConstructor(new Class[]{}); Object myclass=con.newInstance(new Object[]{}); //对象生成啦,现在调用它 method.invoke(myclass,parameter); } catch(Exception e) { e.printStackTrace(); } }}上面的代码答应hello world you这段代码等同于MyClass myclass=new MyClass();myclass.sayHello("you");由此可以看出动态的调用比静态的复杂得多。具体的api函数请参考java api 是java.lang.reflect.Method里的invoke方法。 java程序分离文本内容 java如何获得当前的网络传输速度 计算机能表示最大的整数的方法 超简单错误,但不知道错在哪里? 15分钟后结贴 socket连接的一个很奇怪的问题 在XP2下安装J2SDK1.4.2时遇到的问题! 800分结帖请feiyuegaoshan(飞跃)领分 十万火急,请帮忙! 怎么一直说Exception in thread "main" java.lang.NoclassDefFoundErorr? 请问文件拷贝 参数传递的问题 请问:新闻网站的新闻数据是怎么存的?
String str = "this is a string";
Object str_obj = str;
System.out.println(str_obj.toString());str_obj虽然是Object但是他指向的是String,所以toString()调用的是String的方法。
String className="MyClass";
Clsss iClass = Class.forName(className);
Object iObj =iClass.newInstance();
生成了iObj,你确实不能用classname来动态转换。
如果要使用这个生成的object应该怎么办呢?
我假设你的MyClass如下定义。
public class MyClass
{
public MyClass(){
}
public void sayHello(String who)
{
System.out.println("hello world "+who);
}
}
如果要动态的使用sayHello,可以用如下代码
import java.lang.reflect.*;
class TestClass
{
public static void main(String[] args)
{
//这是sayHello的参数类型为String
Class[] parameterTypes={String.class};
//准备把you这次字符串传进去
Object[] parameter={"you"};
//以下是动态装入的类名和需要调用的函数名
String className="MyClass";
String methodName="sayHello";
try{
Class iClass=Class.forName(className);
//产生一个Method对象(sayHello)
Method method=iClass.getMethod(methodName,parameterTypes);
//Class.forname只是动态的装入了类,我们还需要产生对象,因此
//需要调用它的构造函数,用以下方法调用
Constructor con=iClass.getConstructor(new Class[]{});
Object myclass=con.newInstance(new Object[]{});
//对象生成啦,现在调用它
method.invoke(myclass,parameter);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
上面的代码答应hello world you
这段代码等同于
MyClass myclass=new MyClass();
myclass.sayHello("you");
由此可以看出动态的调用比静态的复杂得多。具体的api函数请参考java api