java中如何实现由类名动态创建对象

java中如何实现由类名动态创建对象,第1张

首先用 Class.forName(完整类名)获得一个Class对象clazz,然后调用Class对象clazz的newInstance()方法得到一个对象。例如:

package kown.reflect

public class ReflectTest

{

    public static void main(String[] args)

    {

        try

        {

            Class<?> clazz = Class.forName("kown.reflect.Show")

            Show show = (Show) clazz.newInstance()

            show.test()

        } catch (ClassNotFoundException e)

        {

            e.printStackTrace()

        } catch (InstantiationException e)

        {

            e.printStackTrace()

        } catch (IllegalAccessException e)

        {

            e.printStackTrace()

        }

    }

}

class Show

{

    public void test()

    {

        System.out.println("hello world!")

    }

}

其中"kown.reflect.Show"是完整类名,就是包名加类的名字。

Java无法动态添加方法和属性。

Java是一门编译性的语言,常见脚本语言是解析性语言。

编译性语言的类的成员与属性在代码编译完成后就已经固定了,无法动态添加;

解释性语言是在运行时可以动态为对象添加属性和方法。

/**

* 根据传入的类名和值,动态构造该类的实例

*

* @param _sClassName

*要构造的类名 如:java.lang.String

* @param _sRealValue

*要创建的对象的值,比如“wuguowei”

* @return 返回String对象,即值为“wuguowei”的字符串

* @throws Exception

*/

private Object getAttributeObject(String _sClassName, String _sRealValue)

throws Exception {

//1.加载类对象

Class attrObjClass = Class.forName(_sClassName)

//2.如果是Long类

if (attrObjClass.isInstance(new Long(0))) {

return new Long(_sRealValue)

}

//3.如果是Integer类

if (attrObjClass.isInstance(new Integer(0))) {

return new Integer(_sRealValue)

}

//4.其他类型……

//5.返回当前类的实例对象

return attrObjClass

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11591082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存