我需要创建包含在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);
我知道我可以使用反射,这是我唯一的方法我发现我可以做到这一点,但是还有其他方法可以做到吗相同吗?
据我所知,反射是完成此任务的唯一方法,除非您想要通过实现某些接口来构建映射的类,并且提取映射的代码知道该接口。