Я хочу напечатать значение «Нет» для необъявленных объектов вместо нуля. Является ли это возможным?
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
Но я хочу напечатать «Нет». Что я должен делать?
Извините за ошибку, я имею в виду частное оружие; Я хочу напечатать «Нет» для оружия.
Опять же, пожалуйста, опубликуйте свой код и уточните свой вопрос. Это похоже на возможную XY-проблема, когда вы, возможно, лаете не по тому дереву, где решение вашей основной проблемы совершенно другое.
Обратите внимание, что вы можете редактировать задать свой вопрос, чтобы добавить дополнительную информацию, включая минимальный воспроизводимый пример.
Подумайте об этом так: из бесконечного числа экземпляров class2, которые не существуют, как компилятор определит, какой из них вызывать с нулевым значением this?
Вспомогательный класс 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");
}
}
Что такое «необъявленный объект»? Объявляются переменные, а не объекты. Вы имеете в виду ссылочную переменную без назначенной ссылки? Пожалуйста, покажите свой код и уточните свой вопрос.