Bunun için Commons BeanUtilsBeanMap
kullanabilirsiniz.
Map map = new BeanMap(someBean);
Güncelleme:
public static Map<String, Object> mapProperties(Object bean) throws Exception {
Map<String, Object> properties = new HashMap<>();
for (Method method : bean.getClass().getDeclaredMethods()) {
if (Modifier.isPublic(method.getModifiers())
&& method.getParameterTypes().length == 0
&& method.getReturnType() != void.class
&& method.getName().matches("^(get|is).+")
) {
String name = method.getName().replaceAll("^(get|is)", "");
name = Character.toLowerCase(name.charAt(0)) + (name.length() > 1 ? name.substring(1) : "");
Object value = method.invoke(bean);
properties.put(name, value);
}
}
return properties;
}
: bu bir seçenek nedeniyle Android'de bazı belirgin kütüphane bağımlılık sorunlarına olmadığına göre, burada
Reflection API küçük yardımı ile bunu nasıl temel bir başlama örneği
java.beans
API'si mevcut olsaydı, o zaman şunları yapabilirsiniz:
public static Map<String, Object> mapProperties(Object bean) throws Exception {
Map<String, Object> properties = new HashMap<>();
for (PropertyDescriptor property : Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors()) {
String name = property.getName();
Object value = property.getReadMethod().invoke(bean);
properties.put(name, value);
}
return properties;
}
Kutsal saçmalık! Bu çok kullanışlı görünüyor! Performans etkileri hakkında bir şey biliyor musunuz? –
Yansıma her zaman bir performans maliyetine sahiptir. Yapacak bir şey yok. Fakat BeanUtils adamlarının olabildiğince optimize ettiğine güvenebilirsiniz. Oldukça popüler bir kütüphane. – BalusC
Serin. POJO'larıma herhangi bir arabirim uygulamak zorunda mıyım yoksa get * adlandırma yeterli kullanıyor mu (Bir Builder kullanarak başlatılan değişmez POJO'lar/özel kurucular kullanıyorum)? –