Один конструктор - несколько аргументов - PullRequest
2 голосов
/ 03 марта 2010

Я нашел задание на каком-то конкурсе по программированию на Java. Нужно создать класс Sentence только с одним аргументом 'text' и только одним конструктором. Вот пример кода теста:

 Sentence s1=new Sentence("only","CAT"),
      s2=new Sentence("and", 2, "mice"),
      s3=new Sentence(s1,s2,"completely","alone"),
      s4=new Sentence(s3, "on the ", new Integer(32), "th street");

 System.out.println(s1); Only cat.
 System.out.println(s2); Only cat and 2 mice.
 System.out.println(s3); Only cat and 2 mice completely alone.
 System.out.println(s4); Only cat and 2 mice completely alone on the 32th street.

Как один конструктор может обслуживать разные наборы аргументов? Есть ли что-то вроде динамического конструктора, который распознает отправленные значения?

Ответы [ 3 ]

7 голосов
/ 03 марта 2010

Используйте varargs .

public class Sentence {

    public Sentence(Object... text) {
        // ...
    }

}

Заполните логику конструктора самостоятельно. Однако, может быть немного ужасно определять все типы. Вы можете использовать Object#toString() и позволить классу Sentence также реализовать его.

2 голосов
/ 03 марта 2010

Да, поддержка Java 5+ varargs - вы можете передавать несколько аргументов одного типа, например:

public Constructor(Object... args){..}
public void methodName(Object... args){..}

Тогда аргументы доступны в виде массива Object. Но это не всегда хорошая практика. Varargs следует использовать только для аргументов с одинаковым логическим типом. Например, список имен. Если нужно передать несколько аргументов, я бы предложил перегружать конструкторы.

В этом случае все аргументы имеют один и тот же логический тип - «слово», так что это хороший способ сделать это.

1 голос
/ 03 марта 2010

Если вы принимаете значение Object ..., вы можете преобразовать что-либо в строку с помощью toString. toString определено в Object, поэтому каждый объект должен его поддерживать.

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