Java对象按字段名称设置值

时间:2017-07-13 13:31:15

标签: java android

我有一个这样的对象:

public class RM {
    private int id;
    private String name;
    private String being_in_force_dt;
    private String modify_dt;
    private AREA AREA;
    private String vehicle;
}

我在xml中的这个对象的日期,现在我有一个问题,我可以将一个值放到字段中作为示例名称,当我有一个:

String attName = xpp.getAttributeName(i); // here String = name
xpp.getAttributeValue(i) // and here is a value

我这样做了:

  if(attName.equals("id"))
                                rm.setId(Integer.parseInt(xpp.getAttributeValue(i)));

但也许是更好的解决方案

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用HashMap作为属性。
不完全是最通用的方法,但肯定很容易实现:

rm = new RM();
rm.setAttribute(xpp.getAttributeName(i), xpp.getAttributeValue(i));

然后是:

String

但是,这会对所有值使用RM。这可能没问题,因为你可能无论如何都要从XML中获取字符串。然后由getAttribute()类的用户决定如何处理通过//to fetch all the users of firebase Auth app DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference usersdRef = rootRef.child("users"); ValueEventListener eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot ds : dataSnapshot.getChildren()) { String name = ds.child("name").getValue(String.class); Log.d("TAG", name); array.add(name); } ArrayAdapter<String> adapter = new ArrayAdapter(OtherUsersActivity.this, android.R.layout.simple_list_item_1, array); mListView.setAdapter(adapter); } @Override public void onCancelled(DatabaseError databaseError) { } }; usersdRef.addListenerForSingleValueEvent(eventListener); } 检索到的值。

答案 1 :(得分:1)

你可以使用Java Reflection,这不是一个漂亮的解决方案,但有效:

    RM obj = new RM();
    Field f = obj.getClass().getDeclaredField("id");
    f.setAccessible(true);
    f.set(obj, 1);

    Assert.assertEquals(1, obj.getId());

我建议你阅读JAXB