2012-09-26 51 views
0

我定義我自己的厚望類:拋出我自己的例外?

public class ProduktException extends Exception { 

    public ProduktException(String msg){ 
    //null 
    } 

    public static void throwProduktNotCreatedException() throws ProduktException { 
     throw new ProduktException("Cannot be created!"); 
    } 

    public static void throwProduktNotDeletedException() throws ProduktException { 
     throw new ProduktException("Cannot be deleted!"); 
    } 
} 

我的問題是我不知道如何把他們當我嘗試:

try { 
... 
} catch(ProduktNotDeletedException e) { 
    e.toString(); 
} 

那不行......但我想有這些結構!哪裏不對?

我喜歡你的答案!

UPDATE:

我的問題是,我不希望創建幾個例外Klasses我想有所有異常的一類。有沒有可能的解決方案?

+0

你是什麼意思,它不起作用?您將異常轉換爲您立即丟棄的字符串。當然沒有事情會發生。 – Cubic

+2

它是'ProduktNotDeletedException'還是'ProduktException'?你爲什麼要調用toString然後不做任何事情?你爲什麼不把msg傳遞給超級構造函數?什麼不工作? – Thilo

+0

Thx爲您的迴應!問題是我想拋出f.ex .:特定的ProduktNotDeletedException而不是ProduktException。因此,如何做到這一點,而不需要爲每個異常創建新類? – maximus

回答

1

如果你需要不同類型的異常進行區分,只是創建2不同的例外,也許是這樣的:

public class ProduktException extends Exception 
{ 
    public ProduktException(String msg){ 
    //null 
    } 
} 

然後有:

public class ProduktNotDeletedException extends ProduktException 
{ 
    .... 
} 

public class ProduktNotCreatedException extends ProduktException 
{ 
    .... 
} 

然後你就可以趕上一個或另一個,或兩者兼而有之。

try { 
    ... 
} catch(ProduktNotDeletedException e1) { 
    e1.toString(); 
} catch(ProduktNotCreatedException e2) { 
    e2.toString(); 
} 

編輯:

對於單級我的意思是:

public class ProduktException extends Exception { 

    boolean notDeleted; 
    boolean notCreated; 

    public ProduktException(String msg){ 
     super(msg); 
    } 

    public boolean isNotDeleted() { 
     return(notDeleted); 
    } 

    public boolean isNotCreated() { 
     return(notCreated); 
    } 

    public static void throwProduktNotCreatedException() throws ProduktException { 
     ProduktException e = new ProduktException("Cannot be created!"); 
     e.notCreated = true; 
     throw e; 
    } 

    public static void throwProduktNotDeletedException() throws ProduktException { 
     ProduktException e = new ProduktException("Cannot be deleted!"); 
     e.notDeleted = true; 
     throw e; 
    } 
} 

然後在你的try/catch:

try { 
    ... 
} catch(ProduktException e) { 
    e.toString(); 
    if(e.isNotCreated()) { 
     // do something 
    } 
    if(e.isNotDeleted()) { 
     // do something 
    } 
} 
+0

是否有可能沒有製作不同的新課程,並將所有內容放在一個班級中? – maximus

+0

@maximus你可以創建一個特定的方法或字段。像'isNotDeleted()'和'isNotCreated()',你可以在你的catch {}塊中檢查。 –

+0

thx爲您的答案!但我並不真正瞭解你的意思?你能舉個例子嗎? – maximus

0

您需要捕獲ProduktException,例如

try { 
    ... 
} catch (ProduktException e) { 
    e.toString(); 
} 

或聲明亞型,例如,

public ProduktNotDeletedException extends ProduktException 

你可能想通過在構造了消息,所以加在你的構造函數如下:

super(msg); 
0

的語法如下。

class RangeException extends Exception 
{ 
    String msg; 

    RangeException() 
    { 
     msg = new String("Enter a number between 10 and 100"); 
    } 
} 

public class MyCustomException 
{ 
    public static void main (String args []) 
    { 
     try 
     { 
      int x = 1; 

      if (x < 10 || x >100) throw new RangeException(); 
     } 
     catch(RangeException e) 
     { 
      System.out.println (e); 
     } 
    } 
} 
+0

退房給鏈接: http://stackoverflow.com/questions/8423700/how-to-create-a-custom-exception-type-in​​-java –

0

,如果你不想創建ProduktException的多個子類爲每種不同類型的異常,你需要扔你可以做的是包括在異常的代碼,這將讓你知道什麼是錯的。事情是這樣的:

public class ProduktException extends Exception { 
    private Code exceptionCode; 
    private String message 

    public ProduktException(Code code, String msg){ 
     this.message = msg; 
     this.exceptionCode = code; 
    } 

    //Getters and setters for exceptionCode and message  
} 

代碼可以是一個枚舉,以便應用程序能知道,每個編碼對應一個特定的「問題」(未創建產品,產品不會被刪除,等等)。然後你可以拋出你的例外

throw new ProduktException(Code.PRODUCT_NOT_CREATED, 
        "Error while creating product"); 

而當你捕捉它,你可以區分的基礎上的代碼。

catch (ProduktException ex) { 
    if (ex.getExceptionCode().equals(Code.PRODUCT_NOT_CREATED)) { 
     ... 
    } 
    else { 
     ... 
    } 
} 
相關問題