java - 使用反射调用方法并返回 map

标签 java reflection dictionary

我正在尝试使用 Java 中的反射来调用示例模型类中的方法process。该方法接受字符串和字符串的映射,并返回相同的内容,即字符串和字符串的映射。

下面是我的代码,但不知何故它每次都会给我一个异常。

Map<String, String> test = new LinkedHashMap<String, String>();
try {

    test.put("CGUID", "ABCD");
    test.put("RESOURCEINDEX", "XYZ");

    Method m = SampleModel.class.getDeclaredMethod("process", Map.class);
    Object o = m.invoke(null, test);

}

这一行 - Object o = m.invoke(null, test); 总是给我空指针异常

任何人都可以帮我解决我在这里做错了什么吗?

下面是方法签名-

@Override
public Map<String, String> process(final Map<String, String> attributes) {

    Map<String, String> newData = new LinkedHashMap<String, String>();

    for (Map.Entry<String, String> entry : attributes.entrySet()) {
        StringBuilder sb =  new StringBuilder();
        sb.append(entry.getValue()).append("$$$$").append(UUID.randomUUID().toString());
        newData.put(entry.getKey(), sb.toString());
    }

    return newData;
}

更新:-

    Class<SampleModel> consClass = SampleModel.class;
            Map<String, String> test = new LinkedHashMap<String, String>();
            try {

                test.put("CGUID", "ABCD");
                test.put("RESOURCEINDEX", "XYZ");

                Method m = SampleModel.class.getDeclaredMethod("process", Map.class);
                Object o = m.invoke(consClass, test);
}

上面的代码也不起作用?它给了我异常(exception)-

对象不是声明类的实例

最佳答案

您的方法不是静态的,因此您需要在调用invoke时提供一个实例。

SampleModel instanceOfYourClass = ...// get an instance
Object o = m.invoke(instanceOfYourClass, test);

如果方法是静态,则只能将null 传递给invoke 调用。阅读解释此问题的 javadoc here .

关于java - 使用反射调用方法并返回 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473384/

相关文章:

java - Spring @RequestBody 错误请求

java - 如何使 while 循环正常工作以纠正给定的二维数组

c# - 仅使用反射通过类型参数区分泛型方法?

python - 使用另一个字典过滤Python字典

python - 将键添加到键内已有的值,然后根据键名称添加额外的值和键

java - 如何在spring ws客户端请求中添加证书链

java - 如何在java中创建数字序列

c# - C#类的属性包

java - 转储源自 jar 文件的 java.lang.Class

python - 映射到 numpy 数组,为什么要花费更多时间?