[英]Why do I get bound mismatch error wen calling Enum.valueOf() using a wildcard
我不知道IntelliJ的工作原理,但是我可以告诉您它无法编译的原因。
在类Enum<T extends Enum<T>>
定义的方法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
是什么(通过使方法通用或使类成为类)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.