[英]Class method checking it's own members aren't null?
我有一個模型類,代表數據庫中的表。 該表有7列,因此該類具有7個屬性。 其中一些允許為空,其他則不允許。
因此,當我將一個人傳遞給公共職能時,我會檢查不允許為null的屬性是否不為null。 跟正常檢查一樣
if(person.getName() == null || person.getSurname() == null ...)
throw new NullPointerException();
我現在想知道,在Person類中制作函數是否有任何弊端,基本上可以做到這一點? 喜歡
public void checkFullDataset()
{
if(name == null || surname() == null ...)
throw new NullPointerException();
return;
}
這樣,每當我與一個人一起工作時,我都會調用此方法,而不是手動測試所有字段。 如果將來要更改表(添加新字段,更改null / not null行為等),這也將是有利的,因為我只需要更改此函數,而不需要更改代碼周圍的許多“ if”。
兩個想法:
最好禁用空的構造函數,並引入一個將所有字段作為參數並將其放在此處的構造函數。
如果你想添加這樣的方法,更好使會話返回boolean
類似於標准的check
,如功能hasElement()
hasNext()
和iEmpty()
等,並讓用戶處理它。
public boolean checkFullDataset() { if(name == null || surname() == null ...) return false; return true; }
滿足您需求的最佳解決方案是使您的Person
類不可變,並使用Builder模式在初始化時(而不是之后)檢查必填字段:
查看此示例: http : //xavimiro.blogspot.fr/2008/04/new-builder-pattern.html
您似乎發現的是“類不變式”概念。 有編程語言,例如Eiffel
,該語言在進入和退出類的每個公共函數之前檢查約束,如果不滿足則拋出異常。 您幾乎是自己做的事情。
還要查找功能的先決條件和后置條件,類似的概念。
根據代碼,您可能會發現檢查是性能問題,在這種情況下,可以將其禁用以用於生產代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.