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

java基础问题,请教
现有接口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类型的对象(这个对象是接口的实现类类型)进行类型转换,来调用接口中的方法


------解决方案--------------------
强制转换可以吧
------解决方案--------------------
必须要执行显式的强制转换才可以吧,貌似无法通过类名动态转换
------解决方案--------------------
Java code


String s = "HelloWorld"; 

Object o = someMethod(); 

((HelloWorld)o).sayHello(s);

------解决方案--------------------
Java code
 
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);
}
}

------解决方案--------------------
探讨
Java code
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().le…

------解决方案--------------------
4楼正解