[英]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.