【发布时间】:2016-01-22 00:35:52
【问题描述】:
假设我有一个存储学生姓名的文本文件和另一个存储他们成绩的文本文件,我正在尝试将它们合并到一个文本文件中(或者可能正在进行其他处理)。进一步假设我编写了一个类,它提供了一个迭代器,它基本上抽象出了数据存储在两个单独文件中的事实。这个迭代器会有这样的方法:
public class MyIterator
{
public boolean hasNext()
{
boolean a = this.nameReader.hasNext();
boolean b = this.gradeReader.hasNext();
if (a != b)
{
// the number of records in the two files don't match;
// most likely input is wrong and user should be alerted about it
// **Question: What exception should I throw here?**
}
return a;
}
public MyTuple next()
{
// read the next records from both files and
// combine them into a tuple
}
}
Java 有IllegalStateException,但它的描述与这里的问题不匹配。
IllegalStateException :
表示方法已在非法或不适当的时间被调用。换言之,Java 环境或 Java 应用程序未处于请求操作的适当状态。
【问题讨论】:
-
标准的是
IllegalArgumentException,但在这种情况下,您可能想定义自己的,因为您可能会将其与所有其他问题分开处理。 -
除非有
IncorrectFileArgumentException,否则您应该创建自己的 -
当您将数据存储在文件中时..也许您可以抛出
EOFException -
程序的用户有机会解决问题吗? - 此外,以 99% 的输出运行程序并然后抛出异常不是一个好策略。此类数据错误应在任何处理之前发出信号。
-
我不认为
IllegalArgumentException是一个好的选择:没有任何参数被传递给hasNext是非法的。我会选择IllegalStateException。
标签: java