现有接口HelloWorld,包含一个方法void sayHello(String s), 它的实现类HelloWorldImpl。
使用场景1:
HelloWorld hw = (HelloWorld)someMethod();
hw.sayHello("hello");现在的场景是:
只能取到HelloWorld类型的字符串形式,如下,String s = "HelloWorld";Object o = someMethod(); // someMethod方法返回HelloWorldImpl的一个对象,类型为Object。通过什么方法可以将 o 装换为HelloWorld的类型,然后调用sayHello方法。就是说知道接口的类型(字符串形式),怎么将Object类型的对象(这个对象是接口的实现类类型)进行类型转换,来调用接口中的方法

解决方案 »

  1.   

    String s = "HelloWorld"; Object o = someMethod(); ((HelloWorld)o).sayHello(s);
      

  2.   


    package com.train.first;import java.lang.reflect.Method;public class Test
    {
    public static void main(String[] args) throws Exception
    {
    String clazz = "Hello";
    Object obj = getHello();

    if (null == obj)
    {
    return;
    }

    Class c = obj.getClass();

    if (c.getInterfaces().length > 0)
    {
    for (int i = 0; i < c.getInterfaces().length; i++)
    {
    if (clazz.equals(c.getInterfaces()[i].getSimpleName()))
    {
    Method m = c.getMethod("sayHello", new Class[]{String.class});

    m.invoke(obj, "God");

    break;
    }
    }
    }

    }

    private static Object getHello()
    {
    return new HelloImpl();
    }
    }interface Hello
    {
    public void sayHello(String name);
    }class HelloImpl implements Hello
    {
    public void sayHello(String name)
    {
    System.out.println("Hello, " + name);
    }
    }
      

  3.   


    public class xx
    {
        public static void main(String[] args) throws Exception
        {
            String clazz = "Hello";
            Object obj = getHello();
            HelloImpl  cc=(HelloImpl)obj;
            cc.sayHello("phenix");     
        }
        
        private static Object getHello()
        {
            return new HelloImpl();
        }
    }interface Hello
    {
        public void sayHello(String name);
    }class HelloImpl implements Hello
    {
        public void sayHello(String name)
        {
            System.out.println("Hello, " + name);
        }
    }
      

  4.   

    其实这样就可以了:Object o = someMethod(); // someMethod()方法返回一个对象。
    Class c = o.getClass();// methodName,方法名,可以通过参数传进来,parameterTypes是参数类型列表,Class[]
    Method method = c.getMethod(methodName, parameterTypes); // values是实参列表,Object[]
    Object objResult = method.invoke(o, values);