我有一个 Utils 类:
public static void setComboBoxDefaultWidth(JComboBox cb)
{
cb.setPrototypeDisplayValue("mmmmmmmmmmmmmmmmmmmmmmmmmm");
}
问题是这会导致编译器警告:
JComboBox 是原始类型。对泛型 JComboBox 的引用应该被参数化
我不确定如何参数化泛型,以便调用方法和函数都能正常工作(没有编译器错误)。无论出于何种原因,我都可以解决一个问题,但不能同时解决两个问题...
最佳答案
事实是JComboBox
在 Java6 中不是通用的,但它在 7 中变得通用只是因为设计有缺陷(因为 getItemAt()
返回一个 Object 类型,您必须手动转换它)。
方法声明为
public void setPrototypeDisplayValue(E prototypeDisplayValue)
这意味着,您必须有特定类的特定实例才能调用它,并且类型必须与为您的组合框声明的类型相对应:
public void setComboBoxDefaultWidth(JComboBox<String> cb) {
cb.setPrototypeDisplayValue("mmmmmmmmmmmmmmmmmmmmmmmmmm");
}
你被迫这样做,因为你正在通过 String
方法所以 JComboBox
必须包含 String
上述解决方案是当您要调用的方法需要泛型类型的参数时需要执行的操作。否则你无法指定它(没有说明目标的数量)并且你将不得不使用通配符 ?
存在:如果一个方法不关心泛型类的具体类型是什么,你只需要指定 JComboBox
有一个通用类型而不用担心类型是什么:
public static void setComboBoxDefaultWidth(JComboBox<?> cb) {
cb.setLightWeightPopupEnabled(true);
}
语法 <?>
只是字面上的意思未知类型,参数确实是一个JComboBox
未知类型的项目。
关于Java Swing - 如何使用泛型在 Swing 组件上创建实用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738159/