簡體   English   中英

將類對象轉換為人類可讀字符串

[英]Convert Class Object to Human Readable String

有沒有什么方法可以自動將自定義類對象轉換為人類可讀的字符串?

例如考慮以下課程:

class Person {
    String Name;
    int Salary;
    ...
}

Person p = new Person();
p.setName("Tony");
p.setSalary(1000);

我需要得到類似的東西:

Person: Name="Tony", Salary=1000

導入Commons Lang你可以使用ToStringBuilder

檢查方法reflectionToString(java.lang.Object) ,這將自動創建您期望的表示。

這段代碼:

Person p = new Person();
p.setName("Tony");
p.setSalary(1000);

System.out.println(ToStringBuilder.reflectionToString(p));

結果這個字符串:

Person@64578ceb[Name=Tony,Salary=1000]

這基本上就是toString的用途。 但鑒於您希望自動完成此操作,您可以創建一些可以執行此操作的常規服務。 使用反射迭代所有字段,然后打印每個字段的名稱和值。 打印它們的值的最簡單方法是使用它們的toString ,但是你也可以在某些情況下以遞歸方式將它們傳遞給該打印服務(當然,你必須找到暫停條件)。

例如,在某些類上,PrintUtils具有:

public static void printFields(Object o) {
    System.out.print(o.getClass.getSimpleName() + ": ");
    for (Field field : o.getClass().getDeclaredFields()) {
        field.setAccessible(true);     // you also get non-public fields
        System.out.print(field.getName() + " = " + field.get(o) + ", ");
    }
}

當然,您必須處理異常等,並可能更好地格式化輸出。 此外,這只是在當前類中聲明的打印字段。 如果您希望在繼承層次結構中聲明更高的字段,則必須多做一些工作。 最后,使用反射比僅使用常規toString要慢得多。 如果可以使用toStringtoString可取。

確定你可以覆蓋類的toString方法。

如下:

class Person {
    String name;
    int salary;
    ...
    @Override public String toString() {
      return "Person: Name='" + name + "', Salary=" + salary;
    }
}

請參閱更多詳細信息https://blogs.oracle.com/CoreJavaTechTips/entry/writing_tostring_methods_tech_days

我認為你可以使用ToStringBuilder ,它是commons-lang一部分。

class Person {
    String Name;
    int Salary;
    ...

   @Override
   public String toString() {
     return "Person: Name = " + Name + "," +
             "Salary="+Salary;
   }
}

Person p = new Person();
p.setName("Tony");
p.setSalary(1000);
System.out.println(p.toString());

一種方法是依靠Apache Commons BeanUtils.describe 這將生成一個bean的屬性Map ,它可以通過Map.toString很好地轉換為字符串。 如果你想要更自定義的東西,你需要深入研究反射API。

你可以使用java中的消息格式: https ://docs.oracle.com/javase/tutorial/i18n//message.html seperate variable by - 你的類中有一個可讀的字符串!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM