java中如何根据一个包含类名的字符串获得这个类实例?
例如
Public Object getClassInstance(String strClassName)
{
return ...;
}
调用时写getClassInstance("ArrayList"),于是得到一个ArrayList的实例?在调用程序中再如何将返回的Object转换为ArrayList类型?
.net中反射可以做到上述要求,不知JAVA怎么做。
谢谢!
[解决办法]
Object a = Class.forName("xx.xxx.Xxx").newInstance();
转为为ArrayList的时候,用(ArrayList)a就行了
[解决办法]
import java.util.*;public class Test{ public static void main(String [] args) { try { ArrayList al = (ArrayList)Class.forName("java.util.ArrayList").newInstance(); }catch(Exception e) {} }}
[解决办法]
java一样也有反射,可以从远端接受到字节流然后组装成你要的类。。。。
[解决办法]
不明白你要干什么~`
为嘛要(Class.forName(strClassName))object这样写
[解决办法]
彻底无关,你都用Object类型不就行了?
[解决办法]
Class.forNanme().newInstance()反回的是一个Object
只需要强制转换就行了啊
Object o = Class.forName("java.util.ArrayList").newInstance();
ArrayList al = (ArrayList)o;
就行了啊。
[解决办法]
外面的类肯定得知道这个Object到底完成了什么样的功能,否则 你程序如何的设计?
所以一般来说你可以先定义一个接口类,如List这样
至于实现类是什么还有些什么样的额外方法就可以不理会了
List list = newList("java.util.ArrayList")类似写法。
[解决办法]
java的反映还有带参数的实例化、数组等,在网上都可以找到相关的样例代码的。
[解决办法]
大家好,我是楼主,我要(Class.forName(strClassName))object这样写的目的是程序可以与对象的具体类型彻底无关,实现更大的灵活性。不知是否可行?谢谢!
______________________________
在目前版本的JDK中不可以。强转的类型必须显示地声明,一般可以强转为object的父类或者接口。