使用 Class<? extends Collection> 作为方法签名
Use Class<? extends Collection> as a method signature
在方法签名中,我需要一个从 Collection(List、Set 等)扩展的任何 class 类型的参数,因此我可以 return 它们中的任何一个。
为了尝试实现这一点,我确实使用了以下方法:
public Collection<T> method(Class<? extends Collection> collectionType) {
// Do something...
}
然而,当我尝试像这样使用它时:
method(List.class);
出现以下错误:
Error: java: incompatible types: java.lang.Class<java.util.List> cannot be converted to java.lang.Class<java.util.Collection>
我确实搜索了一个已经在 Whosebug 中解决的答案,找到了这个 post:Java - Class<? extends Collection>
但这并不能帮助我理解错误。我想我不理解通配符 (?) 的用法。
Class<? extends Collection>
的用法实际上是正确的。我遇到的问题是指方法的 return 类型,无法将 Collection<T>
转换为 List<T>
.
在方法签名中,我需要一个从 Collection(List、Set 等)扩展的任何 class 类型的参数,因此我可以 return 它们中的任何一个。
为了尝试实现这一点,我确实使用了以下方法:
public Collection<T> method(Class<? extends Collection> collectionType) {
// Do something...
}
然而,当我尝试像这样使用它时:
method(List.class);
出现以下错误:
Error: java: incompatible types: java.lang.Class<java.util.List> cannot be converted to java.lang.Class<java.util.Collection>
我确实搜索了一个已经在 Whosebug 中解决的答案,找到了这个 post:Java - Class<? extends Collection>
但这并不能帮助我理解错误。我想我不理解通配符 (?) 的用法。
Class<? extends Collection>
的用法实际上是正确的。我遇到的问题是指方法的 return 类型,无法将 Collection<T>
转换为 List<T>
.