gpt4 book ai didi

java - 我可以像 Swift 那样在 Java Enum 中使用函数类型吗?

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:33 25 4
gpt4 key购买 nike

是否可以用 Java 为以下 swift 代码编写等效代码?事实上,我想知道是否有可能在 Java 的枚举(MyEnum 中的 X,Y)中有一个函数案例

enum MyEnum{
case X((Int) -> String)
case Y((Double) -> Int)
}

最佳答案

不,你不能;至少,如果您希望在使用枚举时可以使用不同的类型,则不会。所有枚举值必须具有相同的类型。

当您希望“枚举”值具有异构类型时,您可以使用具有静态最终字段的类:

final class MyHeterogeneousEnum {
private MyHeterogeneousEnum() {} // Not instantiable.

static final Function<Integer, String> X = ...;
static final Function<Double, Integer> Y = ...;
}

它允许您使用带有完整类型信息的值:

String s = MyHeterogeneousEnum.X.apply(123);
Integer i = MyHeterogeneousEnum.Y.apply(999.0);

当然,您没有像 name()values() 这样的有用方法来迭代此类中的常量,它也不是天生可序列化的.您可以自己实现这些 - 但对于 values() 您必须在返回类型中使用通配符,以便可以返回所有值:

static Iterable<Function<?, ?>> values() {
return Collections.unmodifiableList(Arrays.asList(X, Y));
}

但是,请注意带有通配符输入类型参数的 Function 几乎没有用:您实际上不能向其中传递任何内容(null 除外);所以 values() 方法的实用性有限。

关于java - 我可以像 Swift 那样在 Java Enum 中使用函数类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com