是否可以在Java中进行“通用”转换?

时间:2013-06-10 06:45:26

标签: java

我有以下功能:

@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语句的东西。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

@Override
public <T extends Component> T getTableCellRendererComponent(
                        JTable table, T value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return value;
}