Можно ли использовать toString для необъявленного объекта?

Я хочу напечатать значение «Нет» для необъявленных объектов вместо нуля. Является ли это возможным?

public class class1 {
    class2 c2;

    public static void main(String[] args) {
        class1 c1=new class1();
        System.out.println(c1.c2);

    }
}
class class2{

    public String toString(){
        if (this==null){
            return "None";
        }else{
            return "Correct";
        }
    }
}

Обновлено: я добавил код. Этот код печатает:

null

Но я хочу напечатать «Нет». Что я должен делать?

Что такое «необъявленный объект»? Объявляются переменные, а не объекты. Вы имеете в виду ссылочную переменную без назначенной ссылки? Пожалуйста, покажите свой код и уточните свой вопрос.

Hovercraft Full Of Eels 19.03.2022 00:57

Извините за ошибку, я имею в виду частное оружие; Я хочу напечатать «Нет» для оружия.

yekoba 19.03.2022 00:59

Опять же, пожалуйста, опубликуйте свой код и уточните свой вопрос. Это похоже на возможную XY-проблема, когда вы, возможно, лаете не по тому дереву, где решение вашей основной проблемы совершенно другое.

Hovercraft Full Of Eels 19.03.2022 01:00

Обратите внимание, что вы можете редактировать задать свой вопрос, чтобы добавить дополнительную информацию, включая минимальный воспроизводимый пример.

Slaw 19.03.2022 01:04

Подумайте об этом так: из бесконечного числа экземпляров class2, которые не существуют, как компилятор определит, какой из них вызывать с нулевым значением this?

passer-by 19.03.2022 01:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вспомогательный класс Objects предлагает множество полезных методов. Например, Objects#toString(Object) и Objects#toString(Object, String).

final String s = Objects.toString(obj, "None");

После вашего редактирования: ссылка this никогда не бывает нулевой, поэтому this == null всегда будет ложной. Вам нужно обрабатывать нулевую проверку вне вашего класса. Обычно String.valueOf вызывается при преобразовании объекта в строку. Этот метод обрабатывает null ссылки, а не сам класс. Сначала вам придется вручную преобразовать ваш объект в строку (с помощью утилиты, описанной выше).

Вам нужно будет изменить свой код:

public class Class1 {
    Class2 c2;

    public static void main(String[] args) {
        Class1 c1 = new Class1();
        System.out.println(Objects.toString(c1.c2, "None"));
    }
}
class Class2 {
    @Override
    public String toString(){
            return "Correct";
    }
}

Вы всегда можете создать оболочку вокруг Objects#toString(Object,String), чтобы не указывать значение по умолчанию снова и снова:

public final class MyObjects {
  private MyObjects(){}
  public static String toString(final Object obj) {
    return Objects.toString(obj, "None");
  }
}

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