Вопрос:

Создать пустой конструктор при неправильных параметрах

java

79 просмотра

6 ответа

22 Репутация автора

class classname {
private int value;

    public classname(int value) {

            if(value > 20 || value < 1) {
                //make object null 
            }
            else {
                this.value = value;
            }

    }
} 

По сути, когда параметр не находится в диапазоне, я хочу создать пустой объект.

что-то вроде:

classname newclass = new classname(100);

if(newclass == null) {
//this is what i want
}
Автор: Holajz Источник Размещён: 25.03.2017 07:26

Ответы (6)


2 плюса

24239 Репутация автора

Вместо инициализации objectс null, вы должны бросить IllegalArgumentException, например:

if(value > 20 || value < 1) {
    throw new IllegalArgumentException("Value must be between 1 and 20");
}

Это предотвратит инициализацию и вернет правильное сообщение об ошибке пользователю. Кроме того, это считается наилучшей практикой (например, попробуйте позвонить Integer.parseInt("abc");)

Автор: Darshan Mehta Размещён: 25.03.2017 07:30

1 плюс

38 Репутация автора

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

Посмотри на этот пост. Создать экземпляр другого объекта на основе параметра, переданного в функцию с помощью C #

Автор: vikram singh Размещён: 25.03.2017 07:35

0 плюса

8 Репутация автора

Вы можете сделать что-то вроде этого

class classname {
        private Integer value;

        public classname(Integer value) {
          this.value = value <1 || value>20 ? null : value;
        }
    } 
Автор: jhon Размещён: 25.03.2017 07:40

0 плюса

1 Репутация автора

Вы можете сделать это таким образом

public class MyClass {

    private int value; // if -1 not in the range!

    public MyClass(int value) {

        if (value > 20 || value < 1) {
            this.value = -1;
        } else {
            this.value = value;
        }
    } //end of constructor

 } //end of the MyClass
Автор: Saad Alsubaie Размещён: 25.03.2017 07:47

1 плюс

11 Репутация автора

Вы должны создать фабричный метод, который либо возвращает экземпляр, если аргумент верен, либо null, и скрывает конструктор, используя private:

class YourClass {
    private int value;

    // Factory method
    public static YourClass newYourClass(int value) {
        if(value > 20 || value < 1)
            return null;
        else
            return new YourClass(value);
    }

    private YourClass(int value) {
        this.value = value;
    }
} 
Автор: Man of Java Размещён: 25.03.2017 07:49

0 плюса

38 Репутация автора

public class CustomObjectFactory
{
  private int value;
  CustomObjectFactory(int value)
  {
    this.value = value;
  }

  public CustomObjectFactory getInstance()
  {
    System.out.print(value);
    if(value<10)
    {
      System.out.print("if"+value);
      return null;
    }else
    {
      System.out.print("else"+value);
      return new CustomObjectFactory(value);
    }
  }

}
Автор: vikram singh Размещён: 25.03.2017 08:34
Вопросы из категории :
32x32