使用此类:
public class Fallible<T> {
private final Exception exception;
private final T value;
public Fallible(final T value) {
this.value = value;
this.exception = null;
}
public Fallible(final Exception exception) {
this.value = null;
this.exception = exception;
}
}
我可以安全地假设 value
将永远不会包含 Exception 对象吗?
最佳答案
不,你不能做出这样的假设。例如:
Object obj = new Exception();
Fallible f = new Fallible(obj);
将调用通用构造函数。
检查这一点的唯一方法是使用 instanceof
显式检查 value
的类型:
public Fallible(final T value) {
if (value instanceof Exception) {
this.exception = (Exception) value;
this.value = null;
} else {
this.value = value;
this.exception = null;
}
}
关于java - 动态调度、重载和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638811/