我知道一个类的名儿,比如:"com.common.MyClass"但是在我自己的类中不能用这个来定义他的一个实例,因为这个类的名儿可能会变化,请看下面:
class A{
// com.common.MyClass obj; 不能这样定义
Object obj = Class.forName("com.common.MyClass").newInstance();
// 上面一句,生成一个自定义类的实例,但是我怎样才能把obj强转成com.common.MyClass这个
// 类型呢???或者说怎么样直接把obj定义成com.common.MyClass的类型???(动态的来定义)
// 请高手们指教啊!!!
}
class A{
// com.common.MyClass obj; 不能这样定义
Object obj = Class.forName("com.common.MyClass").newInstance();
// 上面一句,生成一个自定义类的实例,但是我怎样才能把obj强转成com.common.MyClass这个
// 类型呢???或者说怎么样直接把obj定义成com.common.MyClass的类型???(动态的来定义)
// 请高手们指教啊!!!
}
解决方案 »
- 商品搜索比价中的分类及搜索显示价格区间的问题
- 不能显示数据库的内容
- 求教:java的引用存储在哪儿?
- 帮我看看这个异常的写法!
- While(true){}`````到底有什么用?
- 打开一个模态JDialog,怎么才让父窗体在dialog关闭后才得到其返回值
- 问一个关于PREPAREDSTATEMENT套在一个循环里的问题,有关性能的,在线等待,分不够再加
- File.pathSeparator 为什么是";"
- 如何实现Image类序列化?
- Java可以播放wav文件吗? 我怎么调用play后一点声音听不到啊?
- db2服务器用的字符集是utf-8,客户端为windows XP中文版,请问jsp下怎么读取数据表中的中文字符?
- 关于JTABLE中得列如何居中得问题
比如:
obj所属的类有toLog方法,toLog(String str,Integer i),可以用下面的代码调用这个函数
Object obj = Class.forName("com.common.MyClass").newInstance();
Method logMethod = obj.getClass().getMethod("toLog",new Class[] { String.class, Integer.class });
Object logobj = logMethod.invoke(obj, new Object[] { "something",new Integer(7) });
不过你要得到这个类的对象,无非是想调用其方法,或者访问其属性,通过java的反射机制,是完全可以做到的,所以要实现你想要的功能,还是可行的!
我觉得你还是得定义一个接口,然后全部的类都实现这个接口,然后把newInstance()强制转换成接口类型。
下面通过接口调用接口的方法。