不大可能。
强转是编译期的,所以除非你直接根据输入内容转为已知类型,否则不行。
就是:
if ("string".equals(input)) {
String s = (String) object;
} else if ("mytype".equals(input)) {
com.mycompany.myproject.MyType t = (com.mycompany.myproject.MyType) object;
}
还有一个办法,是运行期生成源代码并载入,例如JSP翻译为Servlet就是这样。
但是比较难做。
强转是编译期的,所以除非你直接根据输入内容转为已知类型,否则不行。
就是:
if ("string".equals(input)) {
String s = (String) object;
} else if ("mytype".equals(input)) {
com.mycompany.myproject.MyType t = (com.mycompany.myproject.MyType) object;
}
还有一个办法,是运行期生成源代码并载入,例如JSP翻译为Servlet就是这样。
但是比较难做。
try{ int a1 =new Integer(args[0]);}catce(Exception e){ String a1 =new String(args[0]);}
public class Cast {
public static void main(String[] args) {
String type1 = "java.lang.String";
String type2 = "java.lang.Integer";
Object o1 = "1";
Object o2 = 23;
try {
Object str_ = Class.forName(type1).cast(o1);
Object int_ = Class.forName(type2).cast(o2);
System.out.println(str_);
System.out.println(int_);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}楼主,这是你要的吗?首先得说明啊,Java是不支持强制转化的。而且你永远不可能从"Hello world"转化为数字或者日期。
我的object 是string类型的,我用jxl从excel里面读出来的数据是字符串类型的,我想把它存进数据库里面去,我有excel各个表头java数据类型的数组记录 因为我用了ibatics,~~所以我想弄个hashmas类型的参数,做个通用导入excel模块:-(~~
excel里面数据目前大致有这些
1,hello world,2010-1-13 0:51:40
例如我配置对应的表头为 String[] s = {"java.lang.Integer","java.lang.String","java.util.Date"};则我要有hashmap:
new Integer(1) "hello world" ,new Date(...)
时间格式可能是很多种的,可能是ISO的,UTC的,或者其他
同一个时间就可能有多种字符串表示方式而我要说的就是,某种对象对应的字符串是多样的,你即使知道类型了,也不一定能从他正确地转化为对象。
如果只是这几个,那么很简单
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Cast {
public static void main(String[] args) {
String[] values = { "1", "Hello world", "2010-1-13 0:51:40"};
String[] types = {"java.lang.Integer", "java.lang.String", "java.util.Date"};
for (int i = 0; i < values.length; i++) {
try {
Constructor ctor = Class.forName(types[i]).getConstructor(new Class[]{String.class});
Object value = ctor.newInstance(values[i]);
System.out.println(value);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// No constructor with parameter String;
value = getParser(types[i]).parse(values[i]); // !!!
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
注意我写!!!的地方,那个地方是因为Date类型,不接受这样的参数。然后你再找~value = getParser(types[i]).parse(values[i]); // !!!
你需要用DateFormat等类为Date写一个简单的Parser。内容不多。
用多态扩展你的解析能力。
例如:excel的数据是ID MSG DATE TIME1 hello world 2010-1-13 0:51:40 那第一列就是integer 第二列就是string 等等……不就行了吗?难道还有把日期放到MSG列的情况?
就是做成通用的, 也可以用if...else; 程序设计要简单实用呀