现在手上有两个数组,一个String数组,一个Object数组,两个数组长度一样。
比如String数组内的前3个值是"String" "Date" "Integer"
现在要根据String数组内的值,对Object数组的值进行类型转换,Object.get(0)要转换成String,get(1)转换成Date类型。
问题:怎么样在强制类型转换时 根据一个String值得到相对应的类型?
比如String数组内的前3个值是"String" "Date" "Integer"
现在要根据String数组内的值,对Object数组的值进行类型转换,Object.get(0)要转换成String,get(1)转换成Date类型。
问题:怎么样在强制类型转换时 根据一个String值得到相对应的类型?
不然怎么知道Date是java.util.Date还是xxx.Date
(type) obj;我是这样想的
public class Test {
public static void main(String[] args){
String[] a = new String[]{"java.lang.String","java.util.Date"};
Object[] b = new Object[]{"abc",new java.sql.Date(System.currentTimeMillis())}; try {
Class a1 = Class.forName(a[0]);
Class a2 = Class.forName(a[1]);
String aaa = a1.cast(b[0]).getClass().getSimpleName();
String bbb = a2.cast(b[1]).getClass().getSimpleName();
System.out.println(aaa);
System.out.println(bbb);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
import java.util.Date;class People{private String name;private Date date;private Integer age;}
其实要做的是一个数据转移的东西
从sql server到oracle里,现在碰到的问题是:1.sql server数据库里的字段名和oracle里的不一样,一边是用拼音命名,一边是用英文;2.而且并不是每列都需要转移的,只需要其中一部分;
一开始我也想过7楼的方法,给每一个表映射一个类,但是看了下sql server里有200多张表要转移,想偷懒就放弃了。
现在想用XML做成一个通用点的,只需给需要转移的表和列写一段XML来完成。
public static void main(String[] args) {
String[] a = new String[] { "java.lang.String", "java.util.Date" };
Object[] b = new Object[] { "abc", new java.sql.Date(System.currentTimeMillis()) }; try {
String str ="afda";
Class a0 = Class.forName(a[0]);
Class a1 = Class.forName(a[1]); Method m = null;
Object b0 = null;
Object b1 = null;
try {
m = a0.getMethod("toString", new Class[0]);
b0 = (Object) m.invoke(b[0], new Object[0]); m = a1.getMethod("clone", new Class[0]);
b1 = (Object) m.invoke(b[1], new Object[0]);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(b0);
System.out.println(b1); } catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
LZ看看行不行
我要做的就是一个类型转换
一般是
Object obj = new Object();
String str = (String) obj;
现在的情况是我需要把Object对象转换成什么类型,是通过一个String数组得到
问题是我拿不到()里面的强制转换类型先谢谢9楼 现在有事要出去 回来再看
源码:
import java.lang.reflect.Method;public class Test {
public static void main(String[] args) {
String[] a = new String[] { "java.lang.String", "java.util.Date" };
Object[] b = new Object[] { "testString abc", new java.util.Date(System.currentTimeMillis()) }; Method m = null;
Object bb = null;
Class aa = null;
try {
for (int i = 0; i < a.length; i++) {
aa = Class.forName(a[i]);
// 因为String类没有clone方法,所以String类特殊处理
if ("java.lang.String".equals(aa.getName())) {
m = aa.getMethod("toString", new Class[0]);
} else {
// 只要有clone方法的类,都走这条分支,非final型的类都会有clone方法
m = aa.getMethod("clone", new Class[0]);
}
// 转换后的对象
bb = (Object) m.invoke(b[i], new Object[0]);
// 输出 类型:值
System.out.println(bb.getClass() + " : " + bb); }
} catch (Exception e) {
e.printStackTrace();
}
}
}输出结果:
class java.lang.String : testString abc
class java.util.Date : Sun Feb 21 18:44:48 CST 2010
应该用instanceof判断,或直接equals判断,用反射做不了