判断intanceof class1 or class2 
强转调用方法。

解决方案 »

  1.   

    这类问题可以用"反射"来解决。 去搜一下“java 反射”。 ... 类太多,反射可能会很麻烦 ... ...
      

  2.   

    这类问题可以用"反射"来解决。 去搜一下“java 反射”。类太多,反射可能会很麻烦 ... ...
      

  3.   

    Object o = this.getClass().getClassLoader().loadClass(formClassName).newInstance();
    if(o instanceof class1){
    ((class1)o).print();
    }
    else if(o instanceof class2){
    ((class2)o).print();
    }这样可以不?
      

  4.   

    class1 和class2在设计的时候
    应该写个interface 让class1 和 class2分别实现print方法.
    直接
    interface.print就可以了.
    就不用这么麻烦了.
      

  5.   

    Object a =Class.forName(formClassName).newInstance();
    if(a instanceof class1){
    ........
    }
    else if(a instanceof class2){
    .........
    }
      

  6.   

    Class c = Class.forName(formClassName);    c.getMethod("print", new Class[] {}).invoke(c.newInstance());    c.getMethod("print", new Class[] {String.class}).invoke(c.newInstance(),
            "kingfish");
      

  7.   

    Class c = Class.forName(formClassName);boolean result=c.getMethod("print", new Class[]{}).invoke(c.newInstance());
    c.getMethod("print", new Class[] {String.class}).invoke(c.newInstance(),new Object []{"kingfish"});
      

  8.   

    class1和class2实现共同的接口Inf
    Inf接口中声明方法print
    分别由class1和class2来实现
    newInstance出来的实例转型成Inf
    由接口来调用interface Inf{
        void print();
    }class1 implements Inf{
        public void print(){
            System.out.print("111111");
        }
    }class2 implements Inf{
        public void print(){
            System.out.print("22222");
        }
    }Inf inf=(Inf)(this.getClass().getClassLoader().loadClass(formClassName).newInstance());
    inf.print();OK...
      

  9.   

    同意kingfish(八百里秦川@龙城异客) ( )
    批判kingfish(八百里秦川@龙城异客) ( )楼下的那位,,抄人家不说,还抄的不对
    Object o = c.getMethod("print", new Class[] {}).invoke(c.newInstance());
    这里的o按楼主的说法返回的是Boolean类型的
    boolean result=c.getMethod("print", new Class[]{}).invoke(c.newInstance());
    你也写,晕死,呵呵
      

  10.   

    刚刚好象少写一个参数,如下:
        try{
        Object yourclass =this.getClass().getClassLoader().loadClass("").newInstance();
        Object o = yourclass.getClass().getMethod("print", new Class[]{}).invoke(yourclass,new Object[]{});
        }
        catch(Exception e){}
      

  11.   

    to relive(六道轮回,无想转生)你批判我,我没有意见
    我写的有问题我承认
    但是我楼上的写的对吗?
    你自己运行过吗????以后说话请注意一点
      

  12.   

    to jFresH_MaN(TM)
    哎,只是句玩笑,你也这么当真
    如果你介意,那么我道歉好了。
      

  13.   

    //但是我楼上的写的对吗?to jFresH_MaN(TM):
       你认为那句有问题, 请指正.
      

  14.   

    c.getMethod("print", new Class[] {String.class}).invoke(c.newInstance(),
            "kingfish");
    -------
    最后一个的invoke()方法的最后一个参数是Object[]
      

  15.   

    我想你指的是Object[]吧, JDK1.5里是可以的.
      

  16.   

    JDK1.5可以把String直接转换成数组类型的?
    那么是我无知,OK。
    谢谢指教!
      

  17.   

    JDK1.5中用了可变参数, invoke(Object,Object ...args)所以传数组进去或者把Object一个个传进去都可以invoke(Object, new Object[]{obj1, obj2});
    or
    invoke(Object, obj1, obj2);
    所以也没啥好争的, 大家都对, 版本问题.
    楼主早点揭帖吧.
      

  18.   

    请kingfish(八百里秦川@龙城异客)仔细说明一下,我用的是1.5的,不过没有发现这种用法
    您的意思是如果方法类似invoke(Object,Object[])的,写成invoke(Object, obj1, obj2)会在编译的时候自动转换吗?那么如果类似invoke(Object[], Object[])的怎么区分呢?或许是我不太了解1.5的新特性吧,不过jFresH_MaN(TM),如果你也不知道这个的话,能解释一下你的boolean result=c.getMethod("print", new Class[]{}).invoke(c.newInstance());吗?我指的不是那个boolean
      

  19.   

    JDK1.5的可变参数只对Method.invoke()生效?
      

  20.   

    我现在手头没有jdk1.5的文档,但是如果是可变参数的话,那么上面的用法就没有问题了invoke(Object,Object ...args)
    的意思是你可以传2个或者2个以上的参数,但是从第2个开始的参数都会保存在一个数组里面
    所以1.5版本以前的数组参数都可以用这样来实现了从本质来说invoke(Object,Object ...args)就是invoke(Object[], Object[])
      

  21.   

    刚才没看,举个例子  public void t(Object...args) {
        for(Object s:args){
          System.out.println(s);
        }
      }现在invoke已经改为invoke(Object,Object ...args)了
      

  22.   

    class TTT {
      public static void t(Object ...args) {
        System.out.println("\nargs.length="+args.length);
        for (Object o : args) {
          System.out.print(o+" ");
        }
      }  public static void main(String[] args) {
        t("1", "2", "3");
        t(new Object[] {"1", "2", "3"});
      }
    }输出是完全相同的