2015-10-15 110 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()...然后检查你想要比较的字段。

这样可以避免由于反射而导致的性能问题...

相关问题