具体代码如下://Operator.javapackage org.bromon.reflect;public interface Operator{ public java.util.List act(java.util.List params);}-------------------------------------------------------------------------------//Success.javapackage org.bromon.reflect;import java.util.*;
public class Success implements Operator{ public java.util.List act(java.util.List params)
{ List result=new ArrayList(); result.add(new String("操作成功")); return result; }}-----------------------------------------------------------------------------------//emp.properties#成功响应1000=Success#向客户发送普通文本消息2000=Load#客户向服务器发送普通文本消息3000=Store--------------------------------------------------------------------------//Testreflect.javaimport org.bromon.reflect.Operator;import java.util.*;import java.lang.reflect.*;import java.io.*;public class TestReflect
{
//加载配置文件,查询消息头对应的类名
private String loadProtocal(String header)
{
String result=null;
try { Properties prop=new Properties(); FileInputStream fis=new FileInputStream("emp.properties");
prop.load(fis);
result=prop.getProperty(header);
fis.close();
}catch(Exception e) { System.out.println(e); } return result;
} //针对消息作出响应,利用反射导入对应的类 public String response(String header,String content) { String result=null; String s=null; try {
s="org.bromon.reflect."+this.loadProtocal(header); //加载类 Class c=Class.forName(s); //创建类的事例 Operator mo=(Operator)c.newInstance(); //构造参数列表 Class params[]=new Class[1]; params[0]=Class.forName("java.util.List"); //查询act方法 Method m=c.getMethod("act",params); Object args[]=new Object[1];
args[0]=content;
//调用方法并且获得返回
Object returnObject=m.invoke(mo,args);
}catch(Exception e)
{ System.out.println("Handler-response:"+e); }
return result;
}
public static void main(String args[]) { TestReflect tr = new TestReflect();
tr.response(args[0],"消息内容");
}}编译通过,但键入java TestReflect 1000时出现
Handler-response:java.lang.IllegalArgumentException: argument type mismatch另外编译Success.java时有提示:
Note: Success.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details. 不知道是什么原因,求教.
public class Success implements Operator{ public java.util.List act(java.util.List params)
{ List result=new ArrayList(); result.add(new String("操作成功")); return result; }}-----------------------------------------------------------------------------------//emp.properties#成功响应1000=Success#向客户发送普通文本消息2000=Load#客户向服务器发送普通文本消息3000=Store--------------------------------------------------------------------------//Testreflect.javaimport org.bromon.reflect.Operator;import java.util.*;import java.lang.reflect.*;import java.io.*;public class TestReflect
{
//加载配置文件,查询消息头对应的类名
private String loadProtocal(String header)
{
String result=null;
try { Properties prop=new Properties(); FileInputStream fis=new FileInputStream("emp.properties");
prop.load(fis);
result=prop.getProperty(header);
fis.close();
}catch(Exception e) { System.out.println(e); } return result;
} //针对消息作出响应,利用反射导入对应的类 public String response(String header,String content) { String result=null; String s=null; try {
s="org.bromon.reflect."+this.loadProtocal(header); //加载类 Class c=Class.forName(s); //创建类的事例 Operator mo=(Operator)c.newInstance(); //构造参数列表 Class params[]=new Class[1]; params[0]=Class.forName("java.util.List"); //查询act方法 Method m=c.getMethod("act",params); Object args[]=new Object[1];
args[0]=content;
//调用方法并且获得返回
Object returnObject=m.invoke(mo,args);
}catch(Exception e)
{ System.out.println("Handler-response:"+e); }
return result;
}
public static void main(String args[]) { TestReflect tr = new TestReflect();
tr.response(args[0],"消息内容");
}}编译通过,但键入java TestReflect 1000时出现
Handler-response:java.lang.IllegalArgumentException: argument type mismatch另外编译Success.java时有提示:
Note: Success.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details. 不知道是什么原因,求教.
解决方案 »
- JFrame窗体透明问题
- 急啊,以下代码内存泄漏在哪儿啊?
- 写了一个标签文件,却怎么都编译不了,classespath路径也设了。
- 同一个系统如何使用2个版本的jdk
- 请问自定义Java外观,是不是用UIManager的setLookAndFeel就可以了?
- 谁能告诉我AttributeSet到底是什么东西??
- 工具栏上怎么样添加像jbuilder工具栏上的那些图标?如何在工具栏下加一分隔线?
- 新手:动态生成Node的问题(在线等待)
- java有用吗?
- 请教一个菜鸟级的问题:这两个func()有什么不同?
- String.getbytes()有可能丢失高8位的信息,那么String.toCharArray();就不会丢失信息了,是不是这样的?
- JAVA新人问题。
在Object returnObject=m.invoke(mo,args);语句中,第二个参数args实际上就是act方法的参数列表。数组中的每个元素就是方法中的一个参数。
你的args数组中,第一个元素是一个content,类型是String。而你的act方法需要的参数类型是List,当然不行啊。应该改成:
Object args[]=new Object[1];
List listParam = new ArrayList();
listParam.add(content);
args[0]=listParam;
Object returnObject=m.invoke(mo,args);
这样参数类型才正确。
result.add(new String("操作成功"));
只是将字符串"操作成功"加到了队列中,不会显示出来。