如何在Java中获取Object的属性?

时间:2013-01-17 17:41:58

标签: java

我有一个返回Object

的函数

toString()方法显示我的对象有两个BigDecimal属性。但我不知道如何在代码中获取它们?

enter image description here

我的函数使用hibernate从查询中获取结果:

public Object executeQuery(final String sql) {
    final Query query = getSessionFactory().getCurrentSession().createSQLQuery(sql);
    return query.list().get(0);
}

谢谢。

- 其他信息:

obj.getClass().getDeclaredFields(); // empty array []
obj.getClass().getName();           // [Ljava.lang.Object;
final BigDecimal b = (BigDecimal) obj[0]; //Compilation error: The type of the expression must be an array type but it resolved to Object

5 个答案:

答案 0 :(得分:3)

obj.getClass().getDeclaredFields()可以帮到你。一般学习反射API。如果你对象bean,你也可以使用Jackarta BeanUtils。

答案 1 :(得分:1)

<强>更新

您有一个包含2列的结果集。

Object[] result= query.list().get(0);
BigDecimal number1 = (BigDecimal) result[0];
BigDecimal number2 = (BigDecimal) result[1];

答案 2 :(得分:1)

首先通过

获取该对象的类名
System.out.println(obj.getClass());

由于您正在运行SQL查询,因此结果可能是EntityObject[]

当您从查询中了解检索到的对象时,Object[]可以像

一样进行迭代
if( obj instanceof Object[] ) {
       Object[] objA = (Object[])obj;
       for(Object atomicObj : objA ) {
         System.out.println(atomicObj);
       }
}

它适用于对象数组中出现的所有元素。这次您可能会获得BigDecimal,下一个查询可能会返回StringBigDecimal

答案 3 :(得分:1)

根据您的评论判断,您的对象是对象数组。

因此,您应首先将结果转换为Object数组:

Object[] obj = (Object[]) query.list().get(0);

然后,你应该可以像这样访问第一个BigDecimal:

BigDecimal b = (BigDecimal) obj[0];

您可能希望添加一些异常处理。

答案 4 :(得分:1)

它不是一个Object,它是一个对象数组。

BigDecimal firstColumn = (BigDecimal) ((Object[])query.list().get(0))[0];
BigDecimal secondColumn = (BigDecimal) ((Object[])query.list().get(0))[1];

就是这样。