求教JAVA如何根据字符串调用库函数的API

[复制链接]
查看11 | 回复1 | 2011-3-29 07:30:03 | 显示全部楼层 |阅读模式
别人提供了一个库和一套API,我需要写一个程序,能够调用这些API函数,但是程序事先并不知道需要调用哪个函数或者调用顺序
我通过外部利用报文的形式,将当前需要调用的函数以及参数发过去,JAVA端收到字符串后解析并调用和该字符串匹配的函数

这种方法该如何实现?
回复

使用道具 举报

千问 | 2011-3-29 07:30:03 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">最基本的:
import java.lang.reflect.Method;

public class Reflect {
public static void main(String[] args) {
call(\"ABC\");
call(\"DEF\");
call(\"XYZ\");//这个会有异常,因为没有这个方法

call(\"ABC\",\"hello\");
call(\"DEF\",\"world\");
call(\"XYZ\",\"error\");//这个会有异常,因为没有这个方法

call(\"ABC\",new Class?[]{int.class},new Object[]{1});
call(\"DEF\",new Class?[]{Integer.class},new Object[]{new Integer(2)});
call(\"DEF\",new Class?[]{X.class},new Object[]{new X()});
call(\"DEF\",new Class?[]{X.class},new Object[]{new Integer(3)});//这个会有异常 argument type mismatch
}

private static void call(String methodName) {
try {
Method m=Reflect.class.getDeclaredMethod(methodName,null);
m.invoke(Reflect.class);
} catch (Exception e) {e.printStackTrace();}
}

private static void call(String methodName,String param) {
try {
Method m=Reflect.class.getDeclaredMethod(methodName,String.class);
m.invoke(Reflect.class,param);
} catch (Exception e) {e.printStackTrace();}
}

private static void call(String methodName,Class? extends Object[] ptypes,Object[] obj) {
try {
Method m=Reflect.class.getDeclaredMethod(methodName,ptypes);
m.invoke(Reflect.class,obj);
} catch (Exception e) {e.printStackTrace();}
}

public static void ABC(){
System.out.println(\"Call ABC.\");
}

public static void ABC(String str){
System.out.println(\"Call ABC with param:\" str);
}

public static void ABC(int i){
System.out.println(\"Call ABC with param:\" i);
}

public static void ABC(Integer i){
System.out.println(\"Call ABC with param:\" i);
}

public static void ABC(X i){
System.out.println(\"Call ABC with param:\" i);
}

public static void DEF(){
System.out.println(\"Call DEF.\");
}

public static void DEF(int i){
System.out.println(\"Call DEF.\" i);
}

public static void DEF(Integer i){
System.out.println(\"Call DEF.\" i);
}

public static void DEF(X i){
System.out.println(\"Call DEF.\" i);
}

public static void DEF(String str){
System.out.println(\"Call DEF with param:\" str);
}



public static class X{
public String toString(){
return \"X\";
}
}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行