Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能使';通用';Java中的铸造?_Java - Fatal编程技术网

是否有可能使';通用';Java中的铸造?

是否有可能使';通用';Java中的铸造?,java,Java,我有以下功能: @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if( value instance

我有以下功能:

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

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

这取决于您想要什么。这将汇编:

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

return this;
但意思会有一点变化。它还将返回给定三个组件以外的其他组件的值

这相当于您的代码,但略短一些:

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

return this;

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

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

return this;
但意思会有一点变化。它还将返回给定三个组件以外的其他组件的值

这相当于您的代码,但略短一些:

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

return this;

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

@Override
public Component getTableCellRendererComponent(
                        JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return ( CastToWhatItShouldBeCasted )value;
}
@Override
public <T extends Component> T getTableCellRendererComponent(
                        JTable table, T value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return value;
}
@覆盖
公共T GetTableCellRenderComponent(
JTable表,T值,
布尔值为已选,布尔值为焦点,
整数行,整数列)
{
返回值;
}

是否可以尝试使用您编写的java泛型?如果是这样,您的代码将如下所示:

@Override
public Component getTableCellRendererComponent(
                        JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return ( CastToWhatItShouldBeCasted )value;
}
@Override
public <T extends Component> T getTableCellRendererComponent(
                        JTable table, T value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column)
{
    return value;
}
@覆盖
公共T GetTableCellRenderComponent(
JTable表,T值,
布尔值为已选,布尔值为焦点,
整数行,整数列)
{
返回值;
}

更合适的方法是
返回super.gettableCellRenderComponent(…)
(假设ofc像他应该的那样扩展默认渲染器。)谢谢,我只是在尝试:返回(组件)值;但是如果没有添加if,它会崩溃。更合适的方法是
返回super.gettableCellRenderComponent(…)
(假设ofc像他应该的那样扩展默认渲染器)。谢谢,我只是在尝试:返回(组件)值;但是如果没有添加if,它将崩溃。请注意,这样的强制转换除了检查
值所引用的对象的类型之外,什么都不做。它不会改变任何事情。无论是否使用强制转换(或对
组件进行简单强制转换)
,返回的对象都将保持不变。请注意,这样的强制转换除了检查
值所引用的对象的类型之外,什么都不做。它不会改变任何内容。使用强制转换或不使用强制转换,返回的对象都将保持不变(或使用简单的转换到
组件
)。