[
https://issues.apache.org/jira/browse/LANG-1062?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benedikt Ritter updated LANG-1062:
----------------------------------
Fix Version/s: 4.0
> Use Java 8 features to improve EqualsBuilder
> --------------------------------------------
>
> Key: LANG-1062
> URL: https://issues.apache.org/jira/browse/LANG-1062
> Project: Commons Lang
> Issue Type: Improvement
> Components: lang.builder.*
> Affects Versions: 3.3.2
> Reporter: Bruce Brouwer
> Fix For: 4.0
>
>
> Remove the need for boilerplate code still necessary with EqualsBuilder.
> Instead of checking for instanceOf or equality checks, it would be nice to be
> able to write this:
> {code}
> public boolean equals(final Object obj) {
> return EqualsBuilder.test(this, obj).append(this.id, o -> o.id).isEquals();
> }
> {code}
> I think this could generally work with a subclass of EqualsBuilder with a
> generic type, like this:
> {code}
> public class LambdaEqualsBuilder<T> extends EqualsBuilder {
> private final T obj;
> public LambdaEqualsBuilder(final T _this, final Object obj) {
> if (_this != obj && !_this.getClass().isInstance(obj)) {
> appendSuper(false);
> this.obj = null;
> } else {
> this.obj = (T) obj;
> }
> }
> public <P> LambdaEqualsBuilder<T> append(final P a, final Function<T, P>
> b) {
> if (isEquals()) {
> return (LambdaEqualsBuilder<T>) append(a, b.apply(obj));
> }
> return this;
> }
> // This might actually go in EqualsBuilder itself
> public static <E> LambdaEqualsBuilder<E> test(final E _this, final Object
> _that) {
> return new LambdaEqualsBuilder<E>(_this, _that);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)