为什么#t Object.class并不是全部?

时间:2017-04-25 01:10:07

标签: java

我正在编写一个应用程序,我必须使用foo.setDefaultRenderer(Object.class,new FooRenderer())。当程序运行时,它没有按照我的预期执行。也就是说只有字符串才能正确着色,而整数,短裤等没有正确着色。我曾假设使用Object.class可以适用于所有类型。为什么有必要使用Short.class和Integer.class才能使Render正常工作?

编辑1:下面是请求的代码。应用程序本身现在可以工作,因为我输入了以下四行,但我想了解为什么Object.class不会捕获所有可能的类型。

Future

1 个答案:

答案 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<?>键既不是协变的,也不是逆变的。而是不变