首页 > 解决方案 > Java 函数签名接受单个枚举值

问题描述

我有一个具有多个“类型”值的 Java 类,以及一个可以采用其中一种类型的类。

我正在尝试使用 Java 的类型系统根据Type枚举更改构造函数的实现,但找不到有关如何执行此操作的任何信息。

public enum Type {
    A,
    B,
    C
}

public class Action {
    public Action(Type.A type, String value) {}
    public Action(Type.B type, Float value) {}
    public Action(Type.C type, String value) {}
}

在 Java 中可以实现这种效果吗?例如,就像在 Typescript 中一样。

标签: java

解决方案


不,你写的不会编译。

您可以命名工厂方法 + 私有构造函数来实现类似的结果:

public class Action {
  private Action(Type discriminator, String s, Float f) {...}
  public static ofA(String value) { return new Action(Type.A, value, null); }
  public static ofB(Float value)  { return new Action(Type.B, null, value); }
  public static ofC(String value) { return new Action(Type.C, value, null); }
}

构造函数可能有许多 if / else 分支。(抱歉,代数类型和模式匹配在 Java 中尚不可用。)


推荐阅读