我有一个我继承的方法,它返回一个IllegalFormatConversionException
,并通过public class printf_function_test {
public static void main(String[] args) {
int any = 5;
String object = "car";
char[] ch = {'3','5','6','9'};
System.out.println(ch);
System.out.printf(
"%d anything can happen anytime ,bought a %s and write"
+ "this number now %c",
any,
object,
ch
);
}
}
构造实现:
IEnumerable<whatever>
我发现了一个错误,如果其中一个类的集合为null,则会导致无限循环,所以我添加了一个检查并编写了一个测试:
yield return myWhatever
我现在意识到这个测试失败了,因为即使我调用该方法(由于public IEnumberable<whatever> GetWhatevers() {
while (true) {
// do calculations
yield return myWhatever
}
}
构造),我也从未真正开始迭代结果。
我可以通过这样做来修复测试:
public IEnumberable<whatever> GetWhatevers() {
if (_dependentList == null || _dependentList.Count == 0) {
throw new InvalidOperationException("Unable to process without whatevers");
}
while (true) {
// do calculations
yield return myWhatever
}
}
void MyWhateverThrowsIOEOnEmptyList() {
var sut = new MyThing(null);
Assert.ThrowsException<InvalidOperationException>(() => {
var results = sut.GetWhatevers();
});
}
......但我不喜欢它。这意味着无论调用者调用此方法,他们都不会知道,直到尝试访问结果,其中隐藏了一个IOE。由此产生的变量可以传播到Timbucktu然后回来,一直都不知道它是定时炸弹。
所以现在,只要我使用这种方法,我就必须记住潜伏在其中的可能异常。
这个方法对我来说太复杂了,不想用传统的循环重写。有没有办法可以强制将异常抛出&#34;通话时间&#34;而不是在&#34;解决时间&#34;这样我在打电话时就知道有问题吗?
答案 0 :(得分:1)
从另一个调用iterator方法:
public IEnumerable<Whatever> GetWhatevers(){
if (_dependentList == null || _dependentList.Count == 0) {
throw new InvalidOperationException("Unable to process without whatevers");
}
return GetWhatevers_Impl();
}
private IEnumerable<Whatever> GetWhatevers_Impl(){
while (true) {
// do calculations
yield return myWhatever
}
}