2012-02-28 28 views
1

我有此線的代碼:java。方法返回空。我必須生成什麼異常?

String name = Book.getName(); 

/*next lines of code*/ 

接着,可變name處理在其他代碼而沒有任何檢查。 在某些情況下,可能的情況下,name=null和其他代碼將退出並出現錯誤。

這是不好的。

此外,我無法訪問其他代碼。

所以,你怎麼想,我的下一個實現是正確

try 
    { 
    String name = Book.getName(); 
    if(null== name) 

    throw new NullPointerException("method 'getName' return null"); 

/*next lines of code*/ 
    } 

    catch(NullPointerException e) 
    { 
    System.out.print("Hey! Where book name? I exit!"); 
    System.exit(); 
    } 

我在這種情況下,任何其他選擇呢?

有可能生成任何其他類型的Exception或只有NullPointerException

謝謝。

編輯:

好吧,

String name = Book.getName(); 

它想象代碼行。在實際情況中,我有更復雜的代碼:

List<Book> bookList= new ArrayList<Book>(); 
String name = null; 

Iterator i = BookShop.getBooks.iterator(); //BookShop it is input parameter! 

while(i.hasNext()) 
{ 

Book book = (Book) i.next; 
name = book.getName(); 

nameList.add(name); 


} 

這個例子比較滿。

因此,在此代碼輸入參數BookShop對象。

我可以用這個對象有什麼問題?

  1. 書店可以是NULL;
  2. 方法BookShop.getBooks()可返回NULL;

另外,getName()也可以返回NULL

所以,一般問題下:不能保證輸入參數BookShop的正確性!

,我必須要考慮每一個可能的選項(3 NULL

對於我來說,加總try-catch塊和所有。

不是?

+0

+1「嘿凡書名我退出!?!」 – 2012-02-28 15:55:02

+0

也許最好的方法是不讓方法返回null。爲什麼書店會有空的書而不是空(一套空的)書?然後,如果返回null,您可以高興地隱含NPE。 – 2012-02-28 16:57:19

回答

1

我可能會使用IllegalStateException

String name = Book.getName(); 
if (name == null) { 
    throw new IllegalStateException 
     ("Method foo must not be called when the book has no name"); 
} 

這真的取決於其狀態,雖然從未來 - 它不是真正清楚發生了什麼事情錯在這裏。

我肯定不會開始捕捉NullPointerException - 這樣的異常(和非法狀態之一)不應該明確捕捉。讓他們冒泡,如果合適的話有一些頂級處理程序。

+0

我更新了我的問題,請諒解。 – user471011 2012-02-28 16:21:43

+0

@ user471011:現在還不清楚什麼情況下不會有書。這是否取決於用戶輸入?它是否代表系統中的某些錯誤?該計劃是否應該退出? – 2012-02-28 16:26:17

+0

,是的,系統可能包含一些錯誤。它對我來說並不感到驚訝:( – user471011 2012-02-28 16:28:33

3

您可以通過擴展Exception類來創建任何例外,例如NoNameProvidedException。谷歌有很多例子可以幫助你做到這一點。

我猜你的情況只是一個if如果namenull應該是足夠的,你只想做一個System.exit()檢查。

+0

+1雖然OP明確地詢問是否有可能產生任何其他類型的異常,但在這種情況下僅僅退出過程是不恰當的。 – 2012-02-28 15:57:12

2

你的代碼有點不方便,但我假設你正在學習。你不需要顯式拋出NullPointerException,你可以拋出你喜歡的任何異常。 但是你可能並不需要在這裏捕捉異常,你可以檢查null,如果它是真的,則適當地處理這種情況。

此外,請避免Yoda conditions。你if語句應閱讀

if name is null

所以

if (name == null)

0

使用try和catch在這種情況下是不需要的。你可以這樣寫:

if(Book.getName() != null) 
    String name = Book.getName(); 
else 
    //handle the situation with null 
0

你不需要拋出一個異常在這種情況下 - 只是處理null價值和你的罰款。

1

異常不應用於正常控制流程。只需使用if塊:

String name = Book.getName(); 
if (name == null) { 
    System.out.print("Hey! Where book name? I exit!"); 
    System.exit(); 
} 

/*next lines of code*/ 
+0

+1表示正確。 – 2012-02-28 15:55:36

0

它更友好的Java不使用異常,但只是檢查返回值

String name = Book.getName(); 
if (name == null) 
    System.out.print("Hey! Where book name? I exit!"); 
else { 
    /*next lines of code*/ 
} 
相關問題