java - 在这种情况下如何正确处理异常?

标签 java file-io exception-handling error-handling

我有一个名为 Dictionary 的类,它从文本文件中读取固定长度分隔的单词,并从中创建一个 TreeSet 以查找单词是否存在于字典中。

所以我显然需要以某种方式处理 IOException。我的问题是,错误处理的责任应该落在 Dictionary 类身上,还是应该落在创建 Dictionary 对象的代码身上?

这是我所拥有的:

public class Dictionary
{
    private final TreeSet<String> stringSet = new TreeSet<>();

    // constructor
    public Dictionary(String fileName) throws IOException
    {
        try (final Reader reader = new InputStreamReader(new FileInputStream(fileName)))
        {
            // load dictionary into stringSet
            final char[] buffer = new char[4];
            int numRead = -1;
            while ((numRead = reader.read(buffer)) > 0)
                stringSet.add(new String(buffer, 0, numRead).toUpperCase());
        }
        catch (IOException e)
        {
            throw e;
        }
    }

    public boolean contains(String word)
    {
        return stringSet.contains(word);
    }
}

创建字典对象的代码:

public class MainClass
{
    public static void main(String args[])
    {
        String fileName = "C:/Users/Brandon/Desktop/Android Development/Practice Apps/SwapWords_Prototype/src/data/dictionary.txt";
        try
        {
            Dictionary dict = new Dictionary(fileName);
        }
        catch (IOException e)
        {
            System.out.println("Could not load dictionary <" + fileName + ">");
            e.printStackTrace();
        }

        // TODO handle dict
    }
}

Dictionary 应该捕获并处理 IOException 还是将其扔给调用代码?我的意思是,两者都有效,但哪个更符合逻辑?

最佳答案

我会说您现在的设置方式很好。如果是这种情况,当 Dictionary 遇到 IOException 时,没有任何好的方法可以恢复它,那么您需要提醒调用者发生了此故障.另一方面,如果 Dictionary 可以自己优雅地处理错误(通过尝试加载不同的文件或其他东西),那么您可以将代码放在构造函数中以对调用者隐藏它.

您不希望调用者创建一个由于异常而在内部无效但对调用者来说看起来完全没问题的 Dictionary

关于java - 在这种情况下如何正确处理异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15724708/

相关文章:

java - 当显示键盘时使底部布局保持在底部,而其他布局向上移动

c# - add-windowsfeature 无法识别

python - 如何抑制显示后续异常的父异常(原因)

python - 如何重复 try-except block

java - 为什么私有(private)包 String 构造函数 (int, int, char[]) 已被删除?

java - 为 ssl 通信导入证书

file-io - NetBIOS 做任何缓存吗?

windows - WriteFile 函数的 lpNumberOfBytesWritten 参数

无需 pickle 即可进行序列化的 Python 类设置

maven - Maven 项目中的库项目中的 ClassNotFoundException