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();
}

それはうまくいきません...しかし、私はこれらの構造が欲しいです!なにが問題ですか?

私はあなたの答えに感謝します!!!

アップデート:

私の問題は、複数の例外クラスを作成したくないので、すべての例外を 1 つのクラスにまとめたいということです。それに対する解決策はありますか?

4

4 に答える 4

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
    }
}
于 2012-09-26T08:11:38.833 に答える
0

ProduktExceptionたとえば、キャッチする必要があります

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

またはサブタイプを宣言します。

public ProduktNotDeletedException extends ProduktException

おそらくコンストラクターでメッセージを渡したいので、コンストラクターに次を追加します。

super(msg);
于 2012-09-26T08:07:53.343 に答える
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);
        }
    }
}
于 2012-09-26T08:17:22.947 に答える
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 {
        ...
    }
}
于 2012-09-26T08:24:15.783 に答える