Невозможно разрешить символ «MoreObjects»

У меня есть старый устаревший код:

зависимость com.google.guava:guava:15.0

@Entity
@Table(name = "profiles")
public class Profile {
    @Id
    @Column(name = "id", nullable = false)
    private UUID id;
    @JoinColumn(
    name = "recipient_profile")
    private Profile recipientProfile;
    ....
}

@Entity
@Table(name = "standalone_credit")
public class StandaloneCredit {
    @Id
    @Column(name = "id", nullable = false)
    private UUID id;
    @JoinColumn(name = "recipient_profile_internal_id")
    private Profile recipientBusinessProfile;
    ....
}

import com.google.common.base.MoreObjects;
StandaloneCredit credit;

Profile recipientProfile =
        MoreObjects.firstNonNull(credit.getRecipientProfile(), credit.getRecipientBusinessProfile());

com.google.guava:guava:15.0 — это зависимость от implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.10.RELEASE' Как я могу заменить MoreObjects, не нарушая логику кода с помощью базовой реализации кода Java?

Что именно вы спрашиваете? Вы спрашиваете, что делает MoreObjects.firstNonNull? Вы знаете и спрашиваете, как это сделать на простой Java?

tgdavies 09.04.2024 23:46

Извини. Обновлен код.

Peter Penzov 10.04.2024 00:08

Я не думаю, что вы ответили на вопрос @tgdavies.

Louis Wasserman 10.04.2024 01:32

Я имею в виду, как я могу заменить код из com.google.common.base.MoreObjects основным кодом Java, сохранив при этом ту же функциональность кода?

Peter Penzov 12.04.2024 02:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

MoreObjects.firstNonNull можно напрямую заменить на Objects.requireNonNullElse:

Profile recipientProfile = Objects.requireNonNullElse(
        credit.getRecipientProfile(), credit.getRecipientBusinessProfile());

В последних версиях Guava Javadocs есть конкретные инструкции по выполнению этой замены, а именно:

Пользователи Java 9: ​​вместо этого используйте java.util.Objects.requireNonNullElse(first, second).

Чтобы добавить немного больше контекста, метод Guava MoreObjects.firstNonNull появился раньше Java 9, когда Objects.requireNonNullElse был добавлен в Java. Ожидается, что пользователи, использующие Guava в более новых версиях Java, должны будут перейти на встроенный метод Java.

Javaдокументация

Анализ документации Java этих двух методов показывает, что ожидается, что они будут вести себя идентично друг другу.

MoreObjects.firstNonNull

public static <T> T firstNonNull​(@CheckForNull T first, @CheckForNull T second)

Возвращает первый из двух заданных параметров, который не является null, если он есть, или в противном случае выдает NullPointerException.

[…]

Броски:
NullPointerException - если оба first и second являются null

Objects.requireNonNullElse

public static <T> T requireNonNullElse(T obj, T defaultObj)

Возвращает первый аргумент, если он не null, и в противном случае второй аргумент, если он не null.

[…]

Броски:
NullPointerException — если оба obj равны нулю, а defaultObjnull

В этом конкретном случае зависимость можно устранить, добавив этот чистый метод Java в ваш класс.

public static Profile firstNonNull(Profile p1, Profile p2) {
    if (p1 != null)
        return p1;
    else if (p2 != null)
        return p2;
    else
        throw new NullPointerException("Both profiles are null.");
}

Затем вызывающий код можно обновить следующим образом:

Profile recipientProfile = firstNonNull(credit.getRecipientProfile(), credit.getRecipientBusinessProfile());

Можно также написать общее решение с использованием дженериков, но это выходит за рамки вопроса.

Решение для дженериков — это очень простое изменение строки сигнатуры метода: public static <T> T firstNonNull(T p1, T p2) {

M. Justin 12.04.2024 05:26

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