
您想通过名称 实例化 一个类吗?
首先,您需要创建一个
Class<?>对象:
Class<?> cls = Class.forName(strClassName);
然后实例化它(注意,这会引发各种异常-访问冲突,没有参数就
ClassNotFound没有 公共 构造函数等)
Object instance = cls.newInstance();
然后可以将其转换为:
return (SomeClass) instance;
请确保您了解以下两者之间的区别:
- 类 名 (大约是文件名)
- 类 对象 (本质上是 类型 信息)
- 类 实例 (此类型的实际对象)
如果需要,还可以将
cls对象转换为type
Class<? extends SomeClass>。但是,它并不能给您太多。您可以内联到:
return (SomeClass)(Class.forName(strClassName).newInstance());
哦,但是您 可以
cls在实例化对象之前对对象进行类型检查。因此,只有在它满足您的API(实现您要获取的接口)的情况下,您才能实例化它。
编辑:向 反射 添加更多示例代码。
例如:
if (cls.isInstance(request)) { // ...}对于调用方法,您需要知道可以转换为的接口,或者使用 反射 (对象的
getMethod方法
cls):
Method getRequest = cls.getMethod("getRequest");getRequest.invoke(request);欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)