Любой недостаток этой реализации Java ValueObject

Я смотрю на возможные реализации универсального класса ValueObject для Java. Я видел несколько возможных решений - жесткое кодирование равно методам в каждом объекте, используя Lombok, используя @AutoValue от Google, используя отражение и т. Д. Просто вспомнил, что использование лямбда-выражений является одним из возможных решений - но не знаю, есть ли недостатки этого один?

import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;

public abstract class ValueObject<T extends ValueObject<T>> {
    protected abstract List<Supplier> supplyGettersToIncludeInEqualityCheck();

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {

        T obj2 = (T)obj;

        for(int i = 0; i< supplyGettersToIncludeInEqualityCheck().size(); i++){
            if(!Objects.equals(supplyGettersToIncludeInEqualityCheck().get(i).get(), obj2.supplyGettersToIncludeInEqualityCheck().get(i).get())){
                return false;
            }
        }

        return true;
    }
}

и тогда стандартное использование внутри объектов значения будет

import java.util.*;
import java.util.function.Supplier;

public class ValO extends ValueObject<ValO> {
    private String value;
    private int int2;

    public ValO(String value, int int2) {
        this.value = value;
        this.int2 = int2;
    }

    public String getValue() {
        return value;
    }

    public int getInt2() {
        return int2;
    }

    @Override
    protected List<Supplier> supplyGettersToIncludeInEqualityCheck() {
        return Arrays.asList(this::getValue, this::getInt2);
    }
}

0 ответов

Другие вопросы по тегам