日期:2014-05-20  浏览次数:21093 次

如何将一个类对象转化成另一个Interface
现在有个接口 public interface Test{ pubic int ss;}  
一个类继承这个接口 pubic class Testclass implement Test{}
有一个类 public class Testlocal{
  public void setTest(Test test){ }
  }  

public static testrun(Obect ob){
  String classname="com.test.Testlocal";
  Class classlocal=Class.forName(classname);
  Object local=classlocal.newInstance();
  Method setinfo=classloal.getMethod("setTest",Class.forName("com.test.Test"));
  setinfo.invoke(local,ob);
   



但是 ob 是com.test.Testclass 类型的 直接运行 报 argument type match 

求高手 解决

------解决方案--------------------
Java code

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

interface Test {

}

class Testclass implements Test {

}

public class Testlocal {
    public void setTest(Test test) {

        System.out.print("Hello World!");

    }

    public static void testRun(Object ob) throws ClassNotFoundException,
            InstantiationException, IllegalAccessException, SecurityException,
            NoSuchMethodException, IllegalArgumentException,
            InvocationTargetException {
        String classname = "Testlocal";
        Class classlocal = Class.forName(classname);
        Object local = classlocal.newInstance();
        Method setinfo = classlocal.getMethod("setTest",
                Class.forName("Test"));
        setinfo.invoke(local, ob);
    }

    public static void main(String args[]) throws SecurityException,
            IllegalArgumentException, ClassNotFoundException,
            InstantiationException, IllegalAccessException,
            NoSuchMethodException, InvocationTargetException {
        testRun(new Testclass());
    }
}

------解决方案--------------------
Java code

interface Test {
    public int ss = 1;;
}

class Testclass implements Test {

}

public class Testlocal {
    public void setTest(Test test) {
        System.out.println("ABC");
    }
    public static void testrun(Object ob) throws Exception {
        String classname = "testNew.Testlocal";
        Class classlocal = Class.forName(classname);
        Object local = classlocal.newInstance();
        Method setinfo = classlocal.getMethod("setTest", Class.forName("testNew.Test"));
        setinfo.invoke(local, ob);
    }
    public static void main(String[] args) throws Exception{
        testrun(new Testclass());
    }
}