假设
一段代码如下:
strClassName="A";
Object a= Class.forName(strClassName);
请问,我如何把a 转换为A类型的?
一段代码如下:
strClassName="A";
Object a= Class.forName(strClassName);
请问,我如何把a 转换为A类型的?
解决方案 »
- GUI面板,键盘事件
- 读取数组
- 急啊!!后天就要考试了,大家来帮帮忙吧,在线等
- 请教如何在Jtable表头上加复选框
- 整型-4转化为4个字节是不是11111111 11111111 11111111 11111100?
- 怎么样将这个UDP连接的数据传送程序改成Scoket的??
- 求教:java小程序用eclipse可以编译运行,用命令行编译通过但不能运行
- j2ee/j2se/j2me的区别是什么??
- 请问如何消除一个字符串中的换行符?
- 请教Java高手一个include问题。
- 我在winxp下做了简单的SWT并打包成jar文件成功运行,请问如何移植到linux下运行?
- 请问大虾们什么是静态方法啊
A aa=(A)a;
就行了;前提是我们并不知道类的名字是A,只知道strClassName放的是类的名字
A、A1、A2可以implements MyClass.
这样就可以:
MyClass aa = (MyClass) a;
应该是
Object a= Class.forName(strClassName).newInstance();
System.out.println("Hello");
} public static void main(String[] args) {
String className = "Test";
Test t;
try {
Object o = Class.forName(className).newInstance();
if(o instanceof Test) {
t = (Test)o;
t.print();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
需要调用方法的话,得到 Class 然后 getMethod or getField 就可以使用这个类了
就是反射
Class[] containerTypes = { ArrayList.class, HashMap.class, LinkedList.class, };
void doSth(Object o) {
for (int j = 0; j < containerTypes.length; ++j) {
if (containerTypes[j].isInstance(o)) {
switch (j){
case 0: o = (ArrayList) o ; break;
case 1: o = (HashMap) o ; break;
case 2: o = (LinkedList) o ; break;
}
break;
}
}
}
你看清楚楼主要干什么。
往这儿看strClassName="A";
Class[] containerTypes = { A.class, B.class, C.class, };
void doSth(Object o) {
for (int j = 0; j < containerTypes.length; ++j) {
if (containerTypes[j].isInstance(o)) {
switch (j){
case 0: o = (A) o ; break;
case 1: o = (B) o ; break;
case 2: o = (C) o ; break;
}
break;
}
}
}
strClassName="A";
Object a= Class.forName(strClassName);
请问,我如何把a 转换为A类型的?
我的意思是:
strClassName="A";
Object a= Class.forName(strClassName);
doSth(a);//调用这个方法完成转化
Class[] containerTypes = { A.class, B.class, C.class, };
void doSth(Object o) {
for (int j = 0; j < containerTypes.length; ++j) {
if (containerTypes[j].isInstance(o)) {
switch (j){
case 0: o = (A) o ; break;
case 1: o = (B) o ; break;
case 2: o = (C) o ; break;
}
break;
}
}
}
rower203(华仔) ( ) 说的使用接口的方法,只能适用于所有可能的class都有相同的方法,用接口声明这些相同的方法,转化为接口之后,只用到这些相同的方法.如果这些可能需要转化的类不是相似类,
比如:A.class是java.util.ArrayList ,B.class是java.io.File ,C.class是java.net.URI.那就不能用反射+接口来实现了.
所有可能Class也不妥,感觉楼主的意思是在根本不知道这个类的名字的前提下来实现的。不知道楼主这样做是何目的,如果仅仅是调用其中方法或变量,通过反射机制完全可以实现。