java - 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 中一样。
解决方案
不,你写的不会编译。
您可以命名工厂方法 + 私有构造函数来实现类似的结果:
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 中尚不可用。)
推荐阅读
- ios - 创建自定义键盘时是否可以利用 iOS 系统键盘
- kubernetes - 在 Kubernetes 上部署和公开应用程序
- angular - 尽管使用带有允许规则的反向代理,但 Angular WebApp 调用 API 会导致 CORS 阻塞
- google-app-maker - 如何在客户端脚本中将两个数据源连接到相关的第三个数据源?
- java - 如果一个方法返回一个匿名类,它是返回一个子类还是一个内部类?
- python - 如何将包含列表的字符串转换为
- sql - 如何在 SQL 表的空列中插入序号。数字从 1 到 1,000?
- javascript - 根据输入从数组索引值返回值
- corda - Corda 单元测试因缺少 @Suspendable 而失败
- python-3.x - python 3 List对象分配到字典错误