簡體   English   中英

為什么在使用通配符調用Enum.valueOf()時出現綁定不匹配錯誤

[英]Why do I get bound mismatch error wen calling Enum.valueOf() using a wildcard

我正在嘗試調用Enum<E>類的靜態方法valueOf()但收到編譯錯誤。 請查看下面的代碼段。

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

IntelliJ IDEA可以很好地編譯以下代碼,但是Eclipse出現編譯錯誤:

在此處輸入圖片說明

我不知道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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM