编辑

请注意,如果有任何最佳做法,我的问题还有待进一步了解。我所描述的问题可以通过多种方式解决,实际上,我通过抛出Runtime Exception来处理它。但这是最佳做法吗?还是应该退回到使用静态方法将异常与对象创建分离的更传统的Singleton创建方式

我正在使用枚举实例化有效Java中规定的单例

public enum MailApp {
INSTANCE;
private Gmail mailService;

private MailApp() {
    try {
        mailService = GoogleMailAppFactory.getGmailService();
    } catch (IOException e) {
        throw new AssertionError(e);
    }
}


问题是如果我添加如下的抛出

public enum MailApp {

INSTANCE;

 /** Application name. */

private Gmail mailService;

private MailApp() throws IOException {
    mailService = GoogleMailAppFactory.getGmailService();
}


这不会编译说未处理的异常

我看了How to throw an exception from an enum constructor?

我找不到任何结论性的答案。所以我的问题是:什么是最佳做法?是仅抛出AssertionError前进的方式吗?

谢谢你的帮助

编辑

仅当我们拥有有效的电子邮件服务时,我的“ MailApp”才有效。简而言之,我不想创建一个空对象。您能否阐明一下为什么这可能是个坏主意,以及应该如何处理?

最佳答案

您可能需要考虑将ioexception重新抛出为RuntimeException。

07-28 08:48