现有接口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:
HelloWorld hw = (HelloWorld)someMethod();
hw.sayHello("hello");现在的场景是:
只能取到HelloWorld类型的字符串形式,如下,String s = "HelloWorld";Object o = someMethod(); // someMethod方法返回HelloWorldImpl的一个对象,类型为Object。通过什么方法可以将 o 装换为HelloWorld的类型,然后调用sayHello方法。就是说知道接口的类型(字符串形式),怎么将Object类型的对象(这个对象是接口的实现类类型)进行类型转换,来调用接口中的方法
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);
}
}
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);
}
}
Class c = o.getClass();// methodName,方法名,可以通过参数传进来,parameterTypes是参数类型列表,Class[]
Method method = c.getMethod(methodName, parameterTypes); // values是实参列表,Object[]
Object objResult = method.invoke(o, values);