Cannot infer type arguments for JList<>
This site utilizes Google Analytics, Google AdSense, as well as participates in affiliate partnerships with various companies including Amazon. Please view the privacy policy for more details.
I was recently adding some type parameters to a raw JList
in some old Java code.
The JList
I was messing with in particular passed a ListModel
- a DefaultListModel
to be exact - into its constructor. So, thinking that the JList
needed to have the DefaultListModel
as its generic type, I set my types as follows (that’s the text between the < and > for my non-programming readers):
DefaultListModel<String> model = new DefaultListModel<>();
JList<DefaultListModel<String>> list = new JList<>(this.model);
Welp, Eclipse didn’t like this. I gave me the following error message:
Cannot infer type arguments for JList<>
Ok? I tried removing the <String>
from the DefaultListModel
in the JList
:
DefaultListModel<String> model = new DefaultListModel<>();
JList<DefaultListModel> list = new JList<>(this.model);
Nope. Eclipse is still telling me:
Cannot infer type arguments for JList<>
Huh. After a little Googlin’ and failing to find anything useful, I take a look at the source code for JList
, particularly the constructors. Here are the four constructors for a Jlist
:
public JList()
public JList(final E[] listData)
public JList(final Vector<? extends E> listData)
public JList(ListModel<E> dataModel)
Ope. It turns out that the JList
simply needs the same type parameter as the DefaultListModel
. In other words, this:
DefaultListModel<String> model = new DefaultListModel<>();
JList<String> list = new JList<>(this.model);
Pretty simple, honest mistake and misunderstanding.
Keep in mind I have at least ten years of Java experience and have been playing with programming since I was in the single digits. If you’re new and feel bad because you have to look things up, well, everyone has to look things up.