2

我有以下功能:

@Override
public Component getTableCellRendererComponent(
                        JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{

    if( value instanceof JTextField ) {
        return ( JTextField )value;
    } else if( value instanceof JComboBox ) {
        return ( JComboBox )value;
    } else if( value instanceof JCheckBox ) {
        return ( JCheckBox )value;
    }

    return this;
}

我想知道是否有可能使它更通用,如下所示:

@Override
public Component getTableCellRendererComponent(
                        JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return ( CastToWhatItShouldBeCasted )value;
}

或其他可以让我在其中使用任何组件类型而无需添加下一个 if 语句的东西。

4

2 回答 2

4

这取决于你想要什么。这将编译:

if (value instanceof Component)
    return (Component) value;

return this;

但意思会有所改变。除了给定的三个之外,它还将返回其他组件的值。

这将等同于您的代码,但更短一些:

if (value instanceof JTextField || value instanceof JComboBox|| value instanceof JCheckBox )
    return (Component) value;

return this;
于 2013-06-10T06:47:22.430 回答
0

也许尝试像你写的那样使用java泛型?如果是这样,您的代码将如下所示:

@Override
public <T extends Component> T getTableCellRendererComponent(
                        JTable table, T value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return value;
}
于 2013-06-10T07:08:37.650 回答