2015-10-15 44 views
1

我正在開發一個驗證系統來比較同一類的兩個實例。在java中聲明兩個具有有限屬性的實例

我正在使用Reflection斷言來比較實例的屬性。但有時我們無法期望某些屬性的確切值,如系統生成時間,隨機數等。

示例:考慮具有如下屬性的類。

類=> TransactionDetails

屬性=> 1:TRANSACTIONID 2:的TransactionStatus 3:TRANSACTIONTIME

TransactionDetails的實際實例

1: transactionID : 987DFGAS876 
2: transactionStatus : SUCCESS 
3: transactionTime : 2015-10-15T15:46:53.378+05:30 

TransactionDetails

預期實例
1: transactionID : 987DFGAS876 
2: transactionStatus : SUCCESS 
3: transactionTime : 2015-10-15T15:39:29.127+05:30 

斷言的結果是=>false由於時間的差異。

所以,如果我給我的預期的情況下像如下,

預計TransactionDetails的實例與限制(需要)值

1: transactionID : 987DFGAS876 
2: transactionStatus : SUCCESS 

結果斷言的是=>因爲差距(null & 2015-10-15T15:46:53.378 + 05:30)

所以,在我的情況下,我需要只比較豐富2值與實際實例相關,需要跳過用戶不想斷言值的屬性 。

爲了做到這一點,我正在做反射來獲取所有屬性,並在實際實例中檢查預期實例中的豐富屬性。

但這會導致大型實例的性能問題。這個要求有沒有簡單的 解決方案?

請分享你的想法來解決這個問題,在此先感謝。

回答

1

您可以標記要與自定義註釋進行比較的字段。那麼你可以得到如果你應該通過反射比較字段:

@CheckAnnotation 
String tocompare = "SomeTimeDataString"; 
... 
Annotation[] annotations = field.getDeclaredAnnotations(); 

for(Annotation annotation : annotations){ 
    if(annotation instanceof CheckAnnotation){ 
     //Compare the field 
    } 
} 
+0

謝謝Friwi,但驗證者沒有特權來增強用戶類中字段的字符,輸入到我的功能將只有兩件事,1:充分豐富的實際值,2:有限的豐富期望值。我只需要比較預期實例中的有限充實值與實際實例。 – DeepaNura

1

是否有特定的反思需要?您可以簡單地在有限的字段子集中生成equalshashcode方法檢查。

在eclipse中:menu Source> Generate hashcode()和equals()...然後檢查你想要比較的字段。

這樣可以避免由於反射而導致的性能問題...