簡體   English   中英

適應方法返回true / false

[英]Adapting methods which return true/false

適應向Java返回true / false的C樣式函數時的最佳實踐是什么?

這是說明問題所在的簡單方法。

public static boolean fileNameEndsWithExtension( String filename, String fileExtension)  { 
    return filename.endsWith( fileExtension );
}

請注意,可能有一種更優雅的文件過濾方法(可以對此發表評論)。 無論如何,如果filename是一個null值,則執行以下操作:

  1. 如果filename為null,則返回false? 如果是這樣,如何區分filename為null的情況和String或文件名不以給定文件擴展名結尾的情況?
  2. 將返回類型更改為允許為null值的包裝器類Boolean。
  3. 引發Exception並強制程序員確保從未將null值傳遞給該方法嗎?
  4. 使用其他解決方案?

如果filename為null,則應引發NullPointerException或IllegalArgumentException。 我讓你決定哪個最好。 有一個關於該問題的辯論: IllegalArgumentException或NullPointerException是否為null參數?

您可以在特定應用程序的問題域中執行有意義的操作:

  1. 如果說空文件名以任何擴展名結尾都是合理的,則返回true。
  2. 如果說空文件名以無擴展名結尾是合理的,則返回false。
  3. 如果說沒有人應該問這個問題是有道理的,請讓代碼拋出。
  4. 如果有意義的話,可以使用三值結果,請使用布爾值。
  5. 或做一個三值枚舉並從那返回。

在大多數情況下,選項3會很明智,但是這里沒有人可以排除其他選項對您的應用程序的適用性。 如果您出於充分的原因傳遞了很多有意義的空文件名,則選擇其他文件名可能很有意義。

我將使用1或3。最好是拋出NullPointerExceptions或至少使用assert

返回可為空的布爾值通常會帶來比其價值更大的麻煩,您需要檢查空值等。除了fileNameEndsWithExtension()看起來像一個函數,只有當您知道自己具有有效的文件名時才會使用。

同樣不要忘記fileExtension也可能為null。

  1. 返回true IFF filename.endsWith(fileExtension)

如果filename為null,我將返回false,並且不理會null與其他任何不匹配值之間的區別。

如果空文件名是需要特別驗證和處理的獨特狀態,則應單獨進行驗證,最好在檢查endsWith()之前進行驗證,但仍將null檢查保留在endsWith()中,以防止不必要的運行時異常。

我之所以選擇null = false的行為,可能是由於關系數據庫的影響。 以下查詢將僅返回符合條件的行,其他所有內容(空和不匹配)將被忽略。

select * from filenames
 where filename like '&fileExtension';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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