日期:2014-05-20  浏览次数:20748 次

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就行了

------解决方案--------------------
Java code

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的父类或者接口。