JList泛型缺失:无法调用自定义Character类的getName方法
解决DefaultListModel无法调用Character.getName()的问题
问题核心:代码中DefaultListModel未指定泛型,导致model1.get(index)返回Object类型,无法直接调用自定义Character类的getName()方法。以下是具体修改步骤:
关键修改点
- 指定DefaultListModel泛型:将
DefaultListModel的声明和实例化都指定为<Character>,让模型明确存储的是Character对象 - 修正JList泛型:
JList的泛型要和模型一致,从JList<String>改为JList<Character> - 移除冗余注解:泛型明确后,不再需要
@SuppressWarnings("unchecked") - 规范类名:Java类名首字母需大写,将参数中的
List<character>改为List<Character>
修改后的完整代码
import java.util.ArrayList; import java.util.List; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class fenetre extends JFrame { private JList<Character> list1, list2; private JLabel label; private JPanel panel; private DefaultListModel<Character> model1, model2; public fenetre(List<Character> eq1, List<Character> eq2) { super("JList Example"); setLayout(new BorderLayout()); model1 = new DefaultListModel<>(); for (Character character : eq1) { model1.addElement(character); } list1 = new JList<>(model1); list1.setVisibleRowCount(2); list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); add(new JScrollPane(list1), BorderLayout.WEST); model2 = new DefaultListModel<>(); for (Character character : eq2) { model2.addElement(character); } list2 = new JList<>(model2); list2.setVisibleRowCount(2); list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); add(new JScrollPane(list2), BorderLayout.EAST); panel = new JPanel(); panel.setBackground(Color.WHITE); add(panel, BorderLayout.SOUTH); label = new JLabel(); panel.add(label); list1.addListSelectionListener(event -> { int index = list1.getSelectedIndex(); if (index != -1) { label.setText("Selected player: " + model1.get(index).getName()); } }); list2.addListSelectionListener(event -> { int index = list2.getSelectedIndex(); if (index != -1) { label.setText("Selected player: " + model2.get(index).getName()); } }); } }
说明
- 泛型指定后,
model1.get(index)会直接返回Character类型,无需强制类型转换,可直接调用getName()方法 - 用增强for循环替代传统索引循环,代码更简洁易读
- 修正后的代码符合Java泛型规范,避免了类型转换的潜在错误
内容的提问来源于stack exchange,提问作者Toven
相关产品推荐
相关产品推荐

