java反射创建字段/值 HashMap

标签 java reflection

我需要创建包含在实体中的字段/值的 Hashmap,这样我就可以使用它们在包含带有字段名称的标签的字符串中替换它们。

我有这个代码:

public static String replaceTags(String message, Map<String, String> tags) ...

tags 中的等效值替换 message 中找到的所有标签,但为了构建 Map table 我需要采取“任何”实体,并能够从该实体创建 map 。那么,我怎样才能做到这一点呢?获取我发送实体并返回包含所有字段和值的映射的例程。

public static Map<String, String> getMapFromEntity(Object entity){
    Map<String, String> map = new HashMap<String, String>();

    ...?????

    return map;
}

我知道我可以使用反射,这是我找到的完成此任务的唯一方法,但是还有其他方法可以完成同样的事情吗?我的意思是更有效的方法。

谢谢。

最佳答案

    Field[] fields = entity.getClass().getFields();
    Map<String, String> map = new HashMap<String, String>();
    for(Field f : fields)
            map.put(f.getName(),(String) f.get(entity));

哦,你的实体应该是你的类的一个对象,而不是你的类本身。 如果你的字段是私有(private)的并且你有它们的 getter,你应该使用 getMethods() 并检查方法名称是否以“get”前缀开头。像这样:

    Method[] methods = entity.getClass().getMethods();
    Map<String, String> map = new HashMap<String, String>();
    for(Method m : methods)
    {
        if(m.getName().startsWith("get"))
        {
            String value = (String) m.invoke(entity);
            map.put(m.getName().substring(3), value);
        }
    }

关于java反射创建字段/值 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8306593/

相关文章:

c# - 语义相同的两个属性的 TypeId 应该不同还是相同?

java - 如何使用反射循环子类中的字段

asp.net - 获取 ASP.NET MVC 站点在文件系统中的路径

java - 使用循环设置 Bean 的属性

2.11 中的 Scala 脚本

Java String += 需要速记解释

java - 部署到 OC4j : Unable to find/read file META-INF/application. xml

java - Java中Reflected方法的异常堆栈跟踪

java - 将十六进制转换为具有 3 位数字的 char

java - 自定义 ArrayAdapter 中的 Searchview