簡體   English   中英

檢查其自身成員的類方法不為null?

[英]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”。

兩個想法:

  1. 最好禁用空的構造函數,並引入一個將所有字段作為參數並將其放在此處的構造函數。

  2. 如果你想添加這樣的方法,更好使會話返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM