0

要求:

  1. 部分是通过选择一位老师、一门学科和一个时间表来创建的。

  2. 系统验证是否遵循所有业务规则。

    • 系统检测到未遵循业务规则。

    • 系统通知用户冲突。

    • 系统不创建新部分。

3.系统创建新部分。

我的问题是,如果我为 Section(Teacher t, Subject s, Schedule c) 定义了一个构造函数,我不知道如何返回冲突的错误消息。

我应该让我的构造函数抛出异常吗?如果是,如何从捕获的异常中返回字符串?如何创建该异常?

或者有没有更好但更简单的实现?

4

3 回答 3

4

报告构造函数失败归结为两个选项:

  1. 按照您的建议抛出异常。如果失败不会经常发生并且确实是“异常”的,那么这是一种合理的方法。
  2. 如果失败是业务逻辑的正常部分,我建议使用工厂模式并返回一个包装器对象,该对象包含新创建的对象以及一个状态变量,该变量可以指示失败发生时的详细原因。
于 2013-01-28T01:03:11.967 回答
3

您可以肯定地抛出异常。

throw new Exception("Some required files are missing");

或者创建一个新的异常以在您的应用程序中使用(它的工作方式相同)

如果您想阅读 try / catch 语句中的消息,只需执行以下操作:

try
{
  // ...
}
catch(Exception ex)
{
  System.out.println(ex.getMessage()); //this will get "Some required files are missing"
}

有关更多信息,请查看以下链接: http ://en.wikibooks.org/wiki/Java_Programming/Throwing_and_Catching_Exceptions 如何在 Java 中抛出一般异常? http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getMessage()

于 2013-01-28T01:05:11.883 回答
1

不可能从构造函数返回值。这样做的唯一方法是抛出某种异常。您可以使用现有的异常类型(如果有任何适用)或通过扩展创建自己的Exception. 例如:

public class MyException extends Exception {

    public MyException(){
        super();
    }

    public MyException(String message){
        super(message);
    }
}

您的构造函数将简单地抛出异常的新实例并设置适当的消息。创建类实例的代码将捕获异常并处理它。您可以在此时通过调用获取消息getMessage()

于 2013-01-28T01:00:27.360 回答