java - 动态调度、重载和泛型

标签 java generics dispatch

使用此类:

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/

相关文章:

events - Weld 中的 JavaEE CDI : Generic Events?

r - 用于启用类型分派(dispatch)的惯用语

java - 为什么 Java 不支持结构体? (纯属好奇)

java - Eclipse 无法识别 com.sun.net.httpserver.HttpServer 包

java - 在数百个已编译的 jar 中查找方法或符号调用

java - 如何从线程中抛出异常?

c# - 直接使用 Linq 表达式变量而不是 lambda 表达式时出错

generics - Rust 中的谓词是什么?

ios - 来自 NSData 的 NSString 为 nil