Какой смысл связывать конструктор в java и как его объединить с tostring ()? - PullRequest
0 голосов
/ 27 апреля 2020

Итак, я знаю, как его использовать, как он работает. Вопрос в том, какой смысл в реальной жизни. Представьте себе созданный класс без переопределения toString(). Так какой смысл в этом классе, если вы не можете отобразить его правильно ??

И, пожалуйста, постарайтесь не объяснять, как работает построение цепочек или что-то в этом роде. Я знаю, как это работает. Я хочу знать, кто-нибудь делает это в реальной жизни, потому что без переопределения toString() я не вижу смысла

   public class ConstructorChaining {

        String a;
        int b;
        int c;
        int d;
        int e;

        public ConstructorChaining() {
            this("");
        }


        public ConstructorChaining(String a) {
            this(a, 0);

        }

        public ConstructorChaining(String a, int b) {
            this(a, b, 0);

        }

        public ConstructorChaining(String a, int b, int c) {
            this(a, b, c, 0);

        }

        public ConstructorChaining(String a, int b, int c, int d) {
            this(a, b, c, d, 0);

        }

        public ConstructorChaining(String a, int b, int c, int d, int e) {
            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            this.e = e;
        }

    }

, поэтому представьте, что я создал объект

ConstructorChaining constructorChaining=new ConstructorChaining("name");

и попытался чтобы распечатать его

System.out.println(constructorChaining);

Как мне реализовать toString() для этого

Ответы [ 2 ]

1 голос
/ 27 апреля 2020
 public class ConstructorChaining {

    String a;
    int b;
    int c;
    int d;
    int e;

    public ConstructorChaining() {
        this("");
    }


    public ConstructorChaining(String a) {
        this(a, 0);

    }

    public ConstructorChaining(String a, int b) {
        this(a, b, 0);

    }

    public ConstructorChaining(String a, int b, int c) {
        this(a, b, c, 0);

    }

    public ConstructorChaining(String a, int b, int c, int d) {
        this(a, b, c, d, 0);

    }

    public ConstructorChaining(String a, int b, int c, int d, int e) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.e = e;
    }

    @Override 
    public String toString() {
        return "ConstructorChaining={a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + ", e=" + e;
    }
}

Посмотрите, что ваши друзья говорят вам, нет никакой связи между подрядчиками и переопределенным методом toString.

Все примитивные типы уже инициализированы как 0, поэтому вам не нужно заботиться если значения есть или нет.

1 голос
/ 27 апреля 2020

Просто сделайте это, используя поле, которое устанавливается по-разному в зависимости от вызванного вами конструктора:

public class ConstructorChaining {

   String a;
   int b;
  //This value is different for each constructor, so you can control your
  //toString implementation
  String asString;

public ConstructorChaining() {
            this("");
        }


        public ConstructorChaining(String a) {
            this(a, 0, a + "");

        }

        public ConstructorChaining(String a, int b) {
            this(a, b, 0, a + "" + b);

        }

        private ConstructorChaining(String a, int b, String asString) {
            this.a = a;
            this.b = b;
            this.asString = asString;
        }

@Override
public String toString() {
  return "Overriden toString, asString = " + asString;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...