Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java反射问题_Java_Reflection - Fatal编程技术网

java反射问题

java反射问题,java,reflection,Java,Reflection,我试图在反思中解决以下问题。我有一个POJO,它充当TestResponse类中方法签名的元数据。TestResponse有一个setDate()methid,它接受一个日期参数。我试图使这是一个通用代码,它可以接受任何方法及其签名,以在响应中设置。我不知道的是如何在基于输入调用getMethod()时设置参数类。输入告诉我将参数设置为Date,但不确定如何实现 这是我的示例代码。当然,mdi.modifier.getClass()是错误的,因为它将获得String.class而不是Date.c

我试图在反思中解决以下问题。我有一个POJO,它充当TestResponse类中方法签名的元数据。TestResponse有一个setDate()methid,它接受一个日期参数。我试图使这是一个通用代码,它可以接受任何方法及其签名,以在响应中设置。我不知道的是如何在基于输入调用getMethod()时设置参数类。输入告诉我将参数设置为Date,但不确定如何实现

这是我的示例代码。当然,mdi.modifier.getClass()是错误的,因为它将获得String.class而不是Date.class

TestResponse response = new TestResponse();
Object val = "test";
MDIBase mdi = new MDIBase("setDate", "Date");
Method m = response.getClass().getMethod(mdi.method, mdi.modifier.getClass());
m.invoke(response, new Object[] { val });
这是我们的基地

public class MDIBase {
public String method;
public String modifier;
public MDIBase(String method, String modifier){
this.method = method;
this.modifier = modifier;
}
任何提示都将受到高度赞赏


谢谢

我不确定我是否完全理解您的意思,但是如果我理解了,您希望能够为参数传入类名吗

为了做到这一点,不要传入“Date”,而是传入“java.util.Date”(这就是所谓的完全限定类名),然后调用而不是
getClass
call

response.getClass().getMethod(mdi.method, Class.forName(mdi.modifier));
它将动态加载具有您提供的完全限定名的类


这就是你要找的吗?如果没有,请给我更多的信息,我会再试一次。

正是我写的!但是,为什么还要为mdi.modifier使用字符串呢?为什么不把它变成一个类对象呢?然后您的行
MDIBase mdi=newmdibase(“setDate”,“Date”)将是
MDIBase mdi=new MDIBase(“setDate”,java.util.Date.class)@Stephen,那完全可以。我只是想尽量接近@Shamik的原始代码:-)。我认为字符串可能会在您希望用户能够指定类名(如从命令行或xml等)的实例中提供更大的灵活性……但它肯定会同样工作……很好,这正是我想要的。。非常感谢Chris,感谢您的帮助。@Chris-我完全同意,并且自己使用字符串,例如在配置
permission\u name=com.example.classs以实现权限的属性文件中使用字符串
我的想法是,如果要硬编码“Date”,最好硬编码java.util.Date.class