你是如何使用你曾经使用的C#项目中的Exception.Data属性的?
我想要一些建议模式的答案,而不是那些非常适合您的应用的模式.
昨天我参加了关于SO专门讨论OutOfMemoryException以及处理它的优缺点的讨论(C#try {} catch {}).
我处理它的专业人士是:
但并非所有人都同意这一点,并推测在此异常之后未知的程序状态以及无法做一些有用的事情,因为它需要更多的内存.
因此我的问题是:没有处理OutOfMemoryException并在发生时立即放弃的严重原因是什么?
编辑:你认为OOME和ExecutionEngineException一样致命吗?
我正在编写将用于访问数据库的Java库.我向最终程序员抛出异常,他们使用JAR库以他/她想要的方式处理它.
我编写了一个自定义异常(下面提供)来将特定于连接的异常包装在一起,这样最终程序员就不必在代码中捕获所有这些异常.(为了方便他)
在编写Java库时,这是一个很好的做法吗?通过使用它,用户只需要在他的代码中捕获NConnectionException.
public class NConnectionException extends Exception {
private static final Logger logger = LoggerFactory.getLogger(NConnectionException.class);
public NConnectionException(Exception e) {
if (e instanceof NullPointerException) {
logger.error("ERROR IN READING DF");
e.printStackTrace();
}
else if (e instanceof FileNotFoundException) {
logger.error("FILE NOT FOUND");
e.printStackTrace();
} else if (e instanceof ParserConfigurationException)
{
logger.error("PARSE CONF ERR");
e.printStackTrace();
}
else if (e instanceof org.xml.sax.SAXException)
{
logger.error("SAX ERR");
e.printStackTrace();
}
else if (e instanceof IOException)
{
logger.error("IO ERR");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
}
假设我有以下可能无法修改的Java接口:
public interface MyInterface {
public void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
现在实现它的类是这样的:
class MyImplementation implements MyInterface {
public void doSomething() {
try {
// read file
} catch (IOException e) {
// what to do?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我无法从不读取文件中恢复.
一个子类RuntimeException可以明显帮助我,但我不确定这是否是正确的做法:问题是该异常将不会在类中记录,并且该类的用户可能会得到该异常解决这个问题.
我能做什么?
我们都同意:接口有问题.
我选择的解决方案
我最终决定编写一个MyVeryOwnInterface扩展MyInterface并添加作为错误方法签名的一部分MyRuntimeException:
public interface MyVeryOwnInterface extends MyInterface {
public void doSomething() throws MyRuntimeException;
}
class MyImplementation implements MyVeryOwnInterface {
public void doSomething() throws MyRuntimeException {
try {
// read file …Run Code Online (Sandbox Code Playgroud)