2013-06-29 70 views
0

我在我的java測試中聲明實際值和期望值。 Ofcouse,如果兩個對象不同,則拋出斷言異常。但我想知道,有什麼不同。顯示不同的值一個類中的兩個對象

如果有人知道java庫,請回答我。

簡單:我想打印到控制檯的所有不同的領域:公共,保護,私有(基本類型)。對象的類可以有許多繼承類。我只想記錄簡單的字段:字符串,數字,布爾,字符,數組[] /集合的項目。

如果field是另一個類,請不要記錄它的值(toString函數)。我想爲這個子類顯示不同的簡單字段。

對於集合只顯示不同的值。

例如:

class A { 
private String a; 
protected int b; 
} 


class A1 { 
private int c; 
private String d; 
} 

class B extends A { 
private byte[] array; 
private List<A> collection 
private A1 a1; 
} 

所以,我們比較對象類B. 如果不同領域的A/B,我顯示:

field: a. values: Tom/Jerry. 

如果不等於A1,然後我想知道,哪一個領域:

field: a1.c. value: 10/12. 

同樣,對於數組和集合。

我可以解析所有繼承類的所有字段。我得到每個字段,獲取字段類型。如果簡單(String,Number,Boolean ...)記錄不同的值。

如果它與自己的領域我可以遞歸重複用於提取所有字段的另一個子類。 但我有問題:如何從字段值提取數據,如果它是數組或集合? 我從Field :: get()對象獲得。

如何理解和對象獲取 - >鍵入[]或集合{}類和類是類型? 如果我可以的話,那麼簡單。我按大小比較數組/集合。如果大小相等,則開始等於每個項目。

+0

聽起來像你可能想要使用反射 – selig

+0

@selig,ofcouse :)。我有兩個很大的問題。是否存在爲此準備好的庫?如果沒有,那麼我怎麼可以解析字段爲數組/集合。 –

+0

@YShinkarev:要清楚,'B'不會繼承'a',因爲'a'是'private'。 –

回答

0

要知道,如果你字段的類型是一個數組,使用isArray()方法從Class

從集合{類型},該字段的類型是「集合」,「類型」是一個通用的。你可以做額外的檢查,如果你想通過((ParameterizedTypeImpl) myField.getGenericType()).getActualTypeArguments()檢索它,但可能沒有必要。

相關問題