初始化前调用方法的正确Java异常类型

初始化前调用方法的正确Java异常类型,java,exception,Java,Exception,我有一个类,它有一个显式的初始化方法和一些其他执行实际工作的方法: public class Worker { public void init(Context context) { /* ... */ }; public void doWork() { /* ... */ }; } 在完成任何实际工作之前必须调用Init方法,这在类和方法描述中有记录 如果在调用之前没有执行初始化,我想从DoWork方法抛出一个异常。对于这种情况,正确的异常类型是什么不支持操作异常,非法状

我有一个类,它有一个显式的初始化方法和一些其他执行实际工作的方法:

public class Worker {

    public void init(Context context) { /* ... */ };

    public void doWork() { /* ... */ };
}
在完成任何实际工作之前必须调用
Init
方法,这在类和方法描述中有记录

如果在调用之前没有执行初始化,我想从
DoWork
方法抛出一个异常。对于这种情况,正确的异常类型是什么<代码>不支持操作异常,
非法状态异常
或其他什么?

。但理想情况下,请尝试确保对象始终具有有效状态。:-)在这种情况下,通过在构造函数中要求
上下文
,而不是单独的“init”函数:

public class Worker {

    // Note this is a constructor now, not a method
    public Worker(Context context) {
        /* ... */
    }

    public void doWork() {
        /* ... */
    }
}
。但理想情况下,请尝试确保对象始终具有有效状态。:-)在这种情况下,通过在构造函数中要求
上下文
,而不是单独的“init”函数:

public class Worker {

    // Note this is a constructor now, not a method
    public Worker(Context context) {
        /* ... */
    }

    public void doWork() {
        /* ... */
    }
}

这里有一个方法。@BalusC:是的,谢谢,我是Java新手(因此出现了新手问题和命名问题)。别担心,它们在实际代码中是这样做的!请注意,标准Java异常通常在其Javadoc中很好地描述了它们的用途。这里有一种解释方法。@BalusC:是的,谢谢,我是Java新手(因此出现了新手问题和命名问题)。别担心,它们在实际代码中是这样做的!请注意,标准Java异常通常在其Javadoc中很好地描述了它们的用途。然而,我不愿意将执行复杂计算或其他长时间运行的活动的代码放入构造函数中,不幸的是,情况就是这样。公开工厂方法。在这种情况下:让init函数返回另一个对象,您可以在该对象上调用doWork()。这看起来很像工厂模式:)。@Dyppl:一般来说,在构造函数中执行方法中执行的任何操作都可以。如果“长时间运行”是指发生在另一个线程上,因此可以有一个半构造的实例,那么可以使用接受回调的工厂来处理它(
publicstaticvoidbuildworker(Context-Context,IAcceptWorkers-target)
)其中,
IAcceptWorkers
是一个接口,该接口具有一个由完全构造的
工作者调用的函数。如果你所说的长时间运行只是指它需要一段时间,那很好,仍然是一个构造函数。当然,记录下来。:-)@克劳德:我不确定我是否完全同意;当然,在虚拟机级别,但我认为将实际创建对象与创建对象所需的工作分开是有好处的。是的,我会尽力确保这一点。然而,我不愿意将执行复杂计算或其他长时间运行的活动的代码放入构造函数中,不幸的是,情况就是这样。公开工厂方法。在这种情况下:让init函数返回另一个对象,您可以在该对象上调用doWork()。这看起来很像工厂模式:)。@Dyppl:一般来说,在构造函数中执行方法中执行的任何操作都可以。如果“长时间运行”是指发生在另一个线程上,因此可以有一个半构造的实例,那么可以使用接受回调的工厂来处理它(
publicstaticvoidbuildworker(Context-Context,IAcceptWorkers-target)
)其中,
IAcceptWorkers
是一个接口,该接口具有一个由完全构造的
工作者调用的函数。如果你所说的长时间运行只是指它需要一段时间,那很好,仍然是一个构造函数。当然,记录下来。:-)@克劳德:我不确定我是否完全同意;当然,在虚拟机级别,但我认为将实际创建对象与创建对象所需的工作分开是有好处的。