从toString()打印特定字段

时间:2013-06-01 15:42:14

标签: java arrays string casting arraylist

我使用以下代码从JPA类

获取数据
factory = Persistence.createEntityManagerFactory("abc");
        EntityManager entityManager = factory.createEntityManager();

    classList.add("pack.Person");

    for (Object classOjc : classList) {

        String className = classOjc.toString();

        Query query = entityManager.createQuery("SELECT p FROM " + className + " p");

        @SuppressWarnings("rawtypes")
        List resultList = query.getResultList();

        System.out.println(resultList.size());

        for (Object result : resultList) {

            System.out.println(result.toString());
        }
    }
}



Person [firstName=firstName 1, lastName=lastName 1, bigDecimal=0, myDate=Wed Sep 16 06:42:18 IST 1998], 
Person [firstName=firstName 2, lastName=lastName 2, bigDecimal=0, myDate=Sun May 19 13:12:51 IDT 1957], 
Person [firstName=firstName 3, lastName=lastName 3, bigDecimal=0, myDate=Fri Jun 03 05:09:20 IDT 1949],

班级是

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)

    private String firstName;
    private String lastName;

@Override
public String toString() {
    return "Person [firstName=" + firstName + ", lastName=" + lastName + 
             "]";


....

我的问题是假设覆盖结果如下(给出所有属性和类名), 有办法

因为我覆盖了person类的toString(),所以print就像下面这样,但是我的问题 有没有办法打印例如只是字段名称或只是值(假设我不能更改为字符串,它应该是每个类相同) 问题是我可以任何类,所以我可以将结果转换为例如

2 个答案:

答案 0 :(得分:1)

为什么不根据需要添加多个toString方法。或者使用要打印的属性列表编写单个方法。

答案 1 :(得分:1)

您可以在不知道其类型的情况下反映toString某个Class

只需遍历它声明的字段并获取它们的值:

public static String myMagicToString(final Object in) throws IllegalArgumentException, IllegalAccessException {
    final StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(in.getClass().getSimpleName()).
            append(" [");
    for (final Field field : in.getClass().getDeclaredFields()) {
        field.setAccessible(true);
        stringBuilder.append(field.getName()).
                append("=").
                append(field.get(in)).
                append(",");
    }
    stringBuilder.deleteCharAt(stringBuilder.length() - 1);
    stringBuilder.append("]");
    return stringBuilder.toString();
}

此示例打印的格式与您描述的格式相同,但您只需要修改字符串连接,就可以轻松更改格式。