我有一个名为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);
}
}
创建Dictionary对象的代码:
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还是将其抛给调用代码?我的意思是,任何一个有效,但哪个更合乎逻辑?
答案 0 :(得分:2)
我会说你现在设置它的方式很好。如果是Dictionary
遇到IOException
的情况,则没有任何好的方法可以恢复,那么您将需要提醒调用者发生此故障。另一方面,如果Dictionary
可以自己优雅地处理错误(通过尝试加载不同的文件或其他内容),那么您可以将代码放在构造函数中以将其隐藏在调用者之外。
您不希望调用者使Dictionary
由于异常而在内部无效,但对调用者来说看起来完全正常。