gpt4 book ai didi

java - 为什么使用通配符调用 Enum.valueOf() 时会出现绑定(bind)不匹配错误

转载 作者:行者123 更新时间:2023-11-30 07:42:02 26 4
gpt4 key购买 nike

我正在尝试调用 Enum<E>类的静态方法 valueOf()但我收到一个编译错误。请查看下面的代码片段。

public void hello(Class<? extends Enum<?>> q){  
Object o= Enum.valueOf(q,"hello");
}

IntelliJ IDEA 可以很好地遵守以下代码,但 Eclipse 会出现编译错误:

enter image description here

最佳答案

我不知道 IntelliJ 的工作原理,但我可以告诉你它无法编译的原因。

Enum<T extends Enum<T>>中定义的方法

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

第一个参数是类型 T 的类由 T extends Enum<T> 定义。也就是说,它使用与其自身相同的泛型类型扩展了枚举类型。

当您调用第一个参数为的方法时

Class<? extends Enum<?>>

您没有指定两个 ?根据需要,它们实际上是相同的类型。这会引发不匹配错误。

你可以用你的方法做的就是把它变成通用的:

public static <E extends Enum<?>> void hello(Class<E> q)

但是正如你可以想象的,这仍然无法编译,因为 ?不一定E 。所以你需要拼写出来:

public static <E extends Enum<E>> void hello(Class<E> q)

这将编译。

编辑:另一种思考方式

您可以考虑修复方法签名

public void hello(Class<? extends Enum<?>> q)

将其更改为

public void hello(Class<E extends Enum<E>> q)

只是为了指定两个通配符相同。概念是对的,但语法不合法。您必须定义什么 E是(通过使你的方法通用或你的类)。

关于java - 为什么使用通配符调用 Enum.valueOf() 时会出现绑定(bind)不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516444/

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