Class cc = Class.forName("ClassA");//不一定正确差不多的一个方法名字
cc.invoke("setRkey",...);
差不多是这个样子查阅一下手册总之是调用这个cc的方法

解决方案 »

  1.   

    public class Assistant {
      public static final String CLASSA= "classA";
     public static Object create(String str) {////////////返射机制的方法
        Object cf=null;
        try {
          cf = (Object)Class.forName(str).newInstance();
        }
        catch (ClassNotFoundException ex) {
          ex.printStackTrace();
        }
        catch (IllegalAccessException ex) {
          ex.printStackTrace();
        }
        catch (InstantiationException ex) {
          ex.printStackTrace();
        }
        return cf;
      }
    调用:
    classA cc=(classA)Assistant.create(Assistant.CLASSA);
    cc.setRkey(rkey);
    cc.getRkey();
      

  2.   

    呵呵,java上我也是新手所以只能给个提示啦。
      

  3.   

    To:qiang029(风)你这里是针对ClassA的吧,如果我也想让以下代码适合ClassB,怎么办?
    classA cc=(classA)Assistant.create(Assistant.CLASSA);
    cc.setRkey(rkey);
    cc.getRkey();谢谢!
      

  4.   

    变通一下就可以呵,把下句的"classA"变成classB就可以。
      public static final String CLASSA= "classA";
      

  5.   

    在Assistant 类里面加一个属性
    public static final String CLASSB= "classB";
    还是这么调用
    classB cd=(classB)Assistant.create(Assistant.CLASSB);
    cd.setRkey(rkey);
    cd.getRkey();想做一个类就加一个属性就行了
      

  6.   

    可能我没有将意思说清楚。我想处理ClassA与ClassB共用一段代码。classB cd=(classB)Assistant.create(Assistant.CLASSB);
    cd.setRkey(rkey);
    cd.getRkey();
      

  7.   

    interface GetRKey{
    public long getRkey();
    public void setRkey(long rkey);
    }public class ClassA implements GetRKey{
      private long Rkey;
      public long getRkey() {
            return Rkey;
        }
      public void setRkey(long rkey) {
            this.Rkey = rkey;
        }        
    }public class ClassB implements GetRKey{
      private long Rkey;
      public long getRkey() {
            return Rkey;
        }
      public void setRkey(long rkey) {
            this.Rkey = rkey;
        }        
    }public class Main{
    public static void main(String[] args){
    //实现ClassA的功能
    GetRKey myKey = (GetRKey)Class.forName("ClassA").newInstance();
    myKey.setRkey(123);
    myKey.getRkey();
    //实现ClassB的功能
    GetRKey myKey = (GetRKey)Class.forName("ClassB").newInstance();
    myKey.setRkey(321);
    myKey.getRkey();
    }
    }
    不知合不合要求
      

  8.   

    看看下面的例子能不能给大家点启发?如果有问题共同讨论[email protected]
    例子演示了这一实现。 
    -|Base.java //抽象基类 
     |Son1.java //基类扩展1 
     |Son2.java //基类扩展2 
     |Util.java  
    /** 
     * @author metaphy 
     * create 2005-4-14 9:06:56 
     * 说明: 
     */ 
    (1)Base.java 抽象基类只是一个定义 
    public abstract class Base { 

    (2)Son1.java /Son2.java 是已经实现的JavaBean 
    public class Son1 extends Base{ 
        private int id ; 
        private String name ; 
         
        public int getId() { 
            return id; 
        } 
        public void setId(int id) { 
            this.id = id; 
        } 
        public String getName() { 
            return name; 
        } 
        public void setName(String name) { 
            this.name = name; 
        } 
         
        public void son1Method(String s){ 
            System.out.println(s) ;  
        } 

    (3) 
    public class Son2 extends Base{ 
        private int id; 
        private double salary; 
         
        public int getId() { 
            return id; 
        } 
        public void setId(int id) { 
            this.id = id; 
        } 
        public double getSalary() { 
            return salary; 
        } 
        public void setSalary(double salary) { 
            this.salary = salary; 
        } 

    (4)Util.java 演示了如何根据指定的类名,类字段名和所对应的数据,得到一个类的实例 
    import java.lang.reflect.Method; 
    public class Util { 
        //此方法的最大好处是没有类名Son1,Son2 可以通过参数来指定,程序里面根本不用出现 
        public static Base convertStr2ServiceBean(String beanName,String fieldSetter,String paraValue){ 
            Base base = null ;  
            try { 
                Class cls = Class.forName(beanName) ; 
                base = (Base)cls.newInstance() ; 
                Class[] paraTypes = new Class[]{String.class }; 
                Method method = cls.getMethod(fieldSetter, paraTypes) ; 
                String[] paraValues = new String[]{paraValue} ; 
                method.invoke(base, paraValues) ; 
            } catch (Throwable e) { 
                System.err.println(e); 
            } 
            return base ; 
        } 
         
         
        public static void main(String[] args){ 
            Son1 son1 =(Son1) Util.convertStr2ServiceBean("trying.reflect.Son1","setName","wang da sha"); 
            System.out.println("son1.getName() :"+son1.getName())  ; 
        } 

    //调用结果: 
    //son1.getName() :wang da sha 谢谢!希望能给大家一点启发!
      

  9.   

    谢谢各位讨论。To:btb8668
     你这里已经基本上满足我的要求了。
      

  10.   

    再请问:如果我调用的方法是没有参数的方法,怎么办?method.invoke(base, paraValues) ; ==>改成:method.invoke(base, null) ;为何不行?
      

  11.   

    再请问:如果我调用的方法是没有参数的方法,怎么办?method.invoke(base, paraValues) ; ==>改成:method.invoke(base, null) ;为何不行?
    在查找方法的时候,也要Method method = cls.getMethod(fieldSetter, null) ;
      

  12.   

    方法method.invoke()的参数要求是Object obj, Object...args。
    我的问题是如果setter里的变量是内置基本类型,例如int,double怎么办。我试了用wrapper类,如Integer,Double,好像不行,因为传过去的仍然是Object类,不是基本类型,会抛出java.lang.NoSuchMethedException异常。请各位DX指教。
      

  13.   

    我的代码如下:Object[] paraValues = new Long[]{new Long(value)};
    method.invoke(instance, paraValues);
    结果如下:
    java.lang.NoSuchMethodException: ClassA.setKey(java.lang.Long)