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

那行不通...但是我想要这些结构!怎么了?

我很欣赏你的回答!!!

更新:

我的问题是,我不想创建多个异常类,我想在一个类中包含所有异常。有可能解决这个问题吗?

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(ProduktException e) {
    e.toString();
    if(e.isNotCreated()) {
        // do something
    }
    if(e.isNotDeleted()) {
        // do something
    }
}
于 2012-09-26T08:11:38.833 回答
0

你需要要么 catch 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 回答