Java反射创建字段/值哈希映射



我需要创建包含在Entity中的字段/值的Hashmap,因此我可以使用它们在包含字段名称的标记的String中替换它们。

我有这样的代码:

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

消息中找到的所有标签替换为标签中的等效值,但是为了构建映射表,我需要取"任何"实体,并能够从实体创建映射。那么,我怎样才能让它成为可能呢?获取一个例程,我在其中发送实体并获取返回一个包含所有字段和值的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));

0,你的实体应该是你的类的对象,而不是你的类本身。如果您的字段是私有的,并且您有它们的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);
        }
    }

如果你想要的只是一张地图,为什么不使用像Jackson这样的文字,那么你可以简单地像这样转换它Map map = new ObjectMapper().convertValue(object, Map.class);

我知道我可以使用反射,这是我唯一的方法我发现我可以做到这一点,但是还有其他方法可以做到吗相同吗?

据我所知,反射是完成此任务的唯一方法,除非您想要通过实现某些接口来构建映射的类,并且提取映射的代码知道该接口。

相关内容

  • 没有找到相关文章

最新更新