Gilles Sadowski created LANG-1708:
-------------------------------------
Summary: Usage of "ReflectionDiffBuilder"
Key: LANG-1708
URL: https://issues.apache.org/jira/browse/LANG-1708
Project: Commons Lang
Issue Type: Wish
Components: lang.builder.*
Affects Versions: 3.13.0
Reporter: Gilles Sadowski
Fix For: 3.14.0
If we have either this class
{code}
private static class MyDirect {
private float value;
MyDirect(float a) {
value = a;
}
}
{code}
or this class
{code}
private static class MyReference {
private MyDirect value;
MyReference(float a) {
value = new MyDirect(a);
}
}
{code}
it could be argued that they are _functionally_ equivalent; IOW, code that uses
one or the other (say, via a library) would consider it an implementation
detail (e.g. if that library changed one for the other in some internal object).
[{{ReflectionDiffBuilder}}|https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ReflectionDiffBuilder.html]
however behaves differently: Two instances with the same information contents
(a primitive {{float}} value, from the caller POV) are considered the same in
the former case and *not the same* in the latter.
It will be noted that neither class defines an {{equals(Object)}} method; were
it the case, the documentation of {{ReflectionDiffBuilder}}
[constructor|https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ReflectionDiffBuilder.html#ReflectionDiffBuilder-T-T-org.apache.commons.lang3.builder.ToStringStyle-]
says:
{noformat}
If lhs == rhs or lhs.equals(rhs) then the builder will not evaluate any calls
to append(...) and will return an empty DiffResult when build() is executed.
{noformat}
However there are the use-cases
# (as above) where {{equals}} was not overridden (and the source code cannot be
modified by the user who wants to list the differences, or ensure there are
none, functionally), and
# where one would want to list (potential) differences that could exist even if
{{equals}} would return {{true}} (e.g. if {{equals}} is buggy).
IMHO:
* Current behaviour is inconsistent (even if intended).
* There should be a way to disable the equality check (i.e. *always* use
reflection to list the differences).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)