不大可能。
强转是编译期的,所以除非你直接根据输入内容转为已知类型,否则不行。
就是:
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就是这样。
但是比较难做。

解决方案 »

  1.   

    楼主可以用这种办法
    try{     int a1 =new Integer(args[0]);}catce(Exception e){    String a1 =new String(args[0]);}
      

  2.   


    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"转化为数字或者日期。
      

  3.   


    我的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(...)
      

  4.   

    哦,好了,明白你的需求了。即使不用if-else也是很麻烦的以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。内容不多。
    用多态扩展你的解析能力。
      

  5.   

    既然是从excel里读,还用转换吗?excel里的数据一般应该都是非常格式化的吧,不然你怎么用?
    例如:excel的数据是ID     MSG           DATE          TIME1   hello world     2010-1-13    0:51:40 那第一列就是integer  第二列就是string 等等……不就行了吗?难道还有把日期放到MSG列的情况?
      

  6.   

    不用if...else 是很麻烦的
    就是做成通用的, 也可以用if...else; 程序设计要简单实用呀