Я хочу сделать тесты в конструкторе, чтобы выяснить, есть ли в настоящее время хорошая идея создать объект или нет, с заданными параметрами. Но как я могу отменить и вернуть предупреждение от конструктора в новое утверждение? Должны ли такие тесты вместо этого выполняться вызывающим абонентом перед каждым «новым» заявлением? Я думал, что конструктор будет хорошим местом для этого.Может ли конструктор прервать создание экземпляра?
ответ
Вместо этого вы можете использовать заводский объект. Это может затем запустить ваши проверки и вернуть объект instansiated или null. Это, вероятно, будет более эффективным, чем исключение.
MyObject myObject = MyObjectFactory.createMyObject();
Единственный верный способ прервать строительство объекта, чтобы выбросить исключение до завершения конструктора
Вы можете иметь конструктор сгенерирует исключение, если параметры являются недействительными.
Если речь идет только о достоверности ввода, которую вызывающий должен проверить, вы должны нажать RuntimeException
. Если это то, что вызывающий не обязательно сможет контролировать, конструктор должен выбросить проверенное исключение; обратите внимание, что для этого потребуется весь код, который вызывает конструктор для обработки или объявления исключения.
Да, вы создаете исключение в конструкторе.
В Java вы обычно бросают IllegalArgumentException
, если один из аргументов были неправы, который является обычным делом, чтобы сделать действительно как сторожевая заявление:
public class Roman {
public Roman(int arabic) {
// "Guard statement" in the beginning of the constructor that
// checks if the input is legal
if (arabic < 0) {
throw new IllegalArgumentException("There are no negative roman numerals");
}
// Continue your constructor code here
}
}
Если вы не хотите исключения вы можете сделать, как GavinCatelli's answer и создайте фабричный метод, который возвращает null, если объект не будет «правильным».
public class RomanFactory {
public static Roman getSafeRoman(int a) {
Roman r;
try {
r = new Roman(a);
} catch(IllegalArgumentException e) {
r = null;
}
return r;
}
}
Вы должны проверить нуль-х, хотя, иначе программа может привести к сбою с NullPointerException.
Сделайте свой собственный класс исключения и, соответственно, передайте сообщение на основе параметров, переданных конструктору. Таким образом, выведите это исключение из конструктора.
- 1. Как прервать создание экземпляра объекта в Python?
- 2. Конструктор прервать строительство
- 3. Создание экземпляра Spring bean, передавая конструктор args?
- 4. Как прервать конструктор оконной формы?
- 5. не может прервать lock.acquire(), тогда как я может прервать time.sleep()
- 6. Создание экземпляра без бесконечного экземпляра
- 7. Может ли конструктор backbone.js возвращать подкласс?
- 8. Создание экземпляра статического метода
- 9. Может ли конструктор вернуть субкласс?
- 10. Может ли конструктор использовать Builder
- 11. Может ли POCO содержать конструктор?
- 12. Конструктор контроллера AngularJS и создание экземпляра с аргументами
- 13. Конструктор экземпляра класса C++
- 14. Переменные экземпляра и конструктор?
- 15. Создание нового экземпляра KClass
- 16. Создание экземпляра объектов RavenDb
- 17. Вызов конструктора означает создание экземпляра?
- 18. Удаление XCode может прервать MacPorts?
- 19. Создание объекта переменной экземпляра
- 20. Создание экземпляра класса с()
- 21. Как прервать цепочку конструкторов суперкласса?
- 22. Создание экземпляра класса
- 23. Статический конструктор, называемый конструктором экземпляра?
- 24. Создание экземпляра экземпляра экземпляра в Spockframework
- 25. Возможно ли прервать Scanner.hasNext()
- 26. EF-миграции: создание экземпляра DbContext
- 27. создание экземпляра динамического экземпляра ruby
- 28. Создание экземпляра экземпляра объекта объектов
- 29. создание экземпляра экземпляра в java
- 30. Может ли конструктор вызвать другой конструктор в C++?
+1, пожалуйста, сделайте это вместо того, чтобы бросать в конструктор. –
Да, хорошее время, чтобы попрактиковаться в фабричной схеме! – Tombola