Bjö*_*lex 5 java generics jsf-2
我只是尝试创建一个ListDataModel
有界类型,如下所示:
DataModel<? extends Foo> model = new ListDataModel<? extends Foo>(fooList);
Run Code Online (Sandbox Code Playgroud)
,哪种fooList
类型List<? extends Foo>
.我收到以下错误:
unexpected type
required: class or interface without bounds
found: ? extends Foo
Run Code Online (Sandbox Code Playgroud)
我目前的解决方法是将我的数据复制到一个ArrayList<Foo>
,并DataModel<Foo>
从中构建一个,但我想知道为什么这是必要的,如果有任何方法可以使它工作?
<? extends Foo>
意思是"某种类型,我不知道哪种类型,哪种类型或扩展Foo".在构建数据模型时,您需要告诉他包含哪种类型的数据,而不仅仅是一种未知类型.
只需像这样构建您的数据模型:
DataModel<? extends Foo> model = new ListDataModel<Foo>(fooList);
Run Code Online (Sandbox Code Playgroud)
不幸的是,ListDataModel<Foo>
构造函数只接受a List<Foo>
,而不是a List<? extends Foo>
.在我看来,这似乎是一种误解.例如,HashSet<E>
构造函数采用Collection<? extends E>
as参数.如果您接受类型安全警告,只需将列表转换为a即可List<Foo>
.