Erro ao tentar fazer um comparador para uma determinada classe em um determinado campo

SR2:

Eu estou tentando fazer uma função que re retorna um comparador em um campo de uma classe, mas eu estou recebendo um erro quando eu estou tentando obter o valor de O2, na linha Comparable v2 = (Comparable) field.get(o2);, dizendo que um parâmetro lambda não pode ser convertido para um objeto. Alguém pode me ajudar?

public Comparator comp(String className, String fieldName) throws Exception {
    Comparator comparator = Comparator.comparing((o1, o2) -> {
        Class aClass = null;
        try {
            aClass = Class.forName(className);
            Field field = aClass.getDeclaredField(fieldName);
            field.setAccessible(true);
            Comparable v1 = (Comparable) field.get(o1);
            Comparable v2 = (Comparable) field.get(o2);
            return v1.compareTo(v2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    });
    return comparator;
}
Joni:

Você está usando um método Comparator.comparing, mas o que você está passando é na verdade uma implementação de um comparador. Você poderia simplesmente se livrar dessa chamada de método e uso:

Comparator comparator = (o1, o2) -> {
    Class aClass = null;
    try {
        aClass = Class.forName(className);
        Field field = aClass.getDeclaredField(fieldName);
        field.setAccessible(true);
        Comparable v1 = (Comparable) field.get(o1);
        Comparable v2 = (Comparable) field.get(o2);
        return v1.compareTo(v2);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
};
return comparator;

Alternativamente, você pode continuar usando o método Comparator.comparing, mas tenha em mente que você deveria passar em uma função que extrai o valor de um campo :

public Comparator comp(String className, String fieldName) throws Exception {
    Class aClass = Class.forName(className);
    Field field = aClass.getDeclaredField(fieldName);
    field.setAccessible(true);
    Comparator comparator = Comparator.comparing(o1 -> {
        try {
            Comparable v1 = (Comparable) field.get(o1);
            return v1;
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
    });
    return comparator;
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=349900&siteId=1
Recomendado
Clasificación