[英]Map with values using different generic type parameters
我正在嘗試執行以下操作:
private static final ImmutableMap<String, List<?>> lists = ImmutableMap.of(
"A", new ArrayList<String>(),
"B", new ArrayList<Integer>());
本質上,我試圖捕獲的主要區別是不同的值具有不同的類型參數。 但這給出了錯誤:
Type mismatch: cannot convert from
ImmutableMap<String,ArrayList<? extends Object&Serializable&Comparable<?>>>
to ImmutableMap<String,List<?>>
是否有更好的方法可以解決此問題?
您的代碼在Java 1.8中可以正常編譯,但在Java 1.7中無法編譯。 Java 1.8中包括改進的目標類型推斷 。
基本上,這意味着在Java 1.7中,編譯器將推斷出通用類型參數的最具體類型,即使這會導致目標類型出現編譯器錯誤(在這種情況下, ImmutableMap<String, List<?>>
)。
在Java 1.8中,考慮了目標類型,因此映射值的type參數被視為List<?>
而不是ArrayList<? extends Object&Serializable&Comparable<?>>
ArrayList<? extends Object&Serializable&Comparable<?>>
你可以升級到Java 1.8,或者你可以提供一個明確的類型參數調用的of
方法 。
private static final ImmutableMap<String, List<?>> lists =
// vvvvvvvvvvvvvvvvv
ImmutableMap.<String, List<?>>of(
"A", new ArrayList<String>(),
"B", new ArrayList<Integer>());
您的代碼應該可以工作,但這是我相信您想要的一般概念:
private ImmutableMap<String, List<T extends Object&Serializable&Configurable<?>>> = ...;
您不能使用通配符,但是可以使用命名類型。 因此,您可能需要在類級別而不是字段級別聲明類型,但是您可以按常規方式使用聲明的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.