package p5.forkjoin;
import java.util.function.Supplier;
/*
这是一个模拟Optional类的用于处理空的类
*/
public class MyTest<T> {
/*
* 被托管的值
*/
private T value;
public MyTest(T t) {
this.value = t;
}
/*
* 现在需要实现一个方法: 该方法接收一个 返回Throwable对象 的Supplier对象
* 如果value不为空返回value,否则抛出supplier对象(的get()方法)返回的异常
*/
/*
* 实现1 存在的问题:抛出的异常始终为throwable,即使e.get()返回一个RuntimeException。
*/
// public T orElseThrow(Supplier<? extends Throwable> e) throws Throwable {
// if (value != null) {
// return value;
// } else {
// throw e.get();
// }
// }
/*
* 实现2:
* 让抛出的异常(e.get())也变为了泛型,e.get()返回的类型 与 throws 声明的类型一致
*
*/
public <A extends Throwable>T orElseThrow(Supplier<? extends A> e) throws A {
if (value != null) {
return value;
} else {
throw e.get();
}
}
}