我正在编写一个应用程序,我必须使用foo.setDefaultRenderer(Object.class,new FooRenderer())。当程序运行时,它没有按照我的预期执行。也就是说只有字符串才能正确着色,而整数,短裤等没有正确着色。我曾假设使用Object.class可以适用于所有类型。为什么有必要使用Short.class和Integer.class才能使Render正常工作?
编辑1:下面是请求的代码。应用程序本身现在可以工作,因为我输入了以下四行,但我想了解为什么Object.class不会捕获所有可能的类型。
Future
答案 0 :(得分:1)
在这些问题中,请先查看源代码,例如:grepcode。
public void setDefaultEditor(Class<?> columnClass, TableCellEditor editor) {
if (editor != null) {
defaultEditorsByColumnClass.put(columnClass, editor);
}
else {
defaultEditorsByColumnClass.remove(columnClass);
}
}
如果你这样做,你会发现JTable使用名为defaultEditorsByColumnClass的HashTable来保存这些渲染器
transient protected Hashtable defaultEditorsByColumnClass;
显示和编辑单元格内容的对象表,由TableModel接口中的getColumnClass中声明的类索引。
并且类类型是此表的关键。由于Object是与Short不同的类型,从String,...您所看到的行为完全有意义,因为在这种情况下,Map的Class<?>
键既不是协变的,也不是逆变的。而是不变。