编辑
请注意,如果有任何最佳做法,我的问题还有待进一步了解。我所描述的问题可以通过多种方式解决,实际上,我通过抛出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。