是否有可能使';通用';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,它将崩溃。请注意,这样的强制转换除了检查值所引用的对象的类型之外,什么都不做。它不会改变任何事情。无论是否使用强制转换(或对组件进行简单强制转换)
,返回的对象都将保持不变。请注意,这样的强制转换除了检查值所引用的对象的类型之外,什么都不做。它不会改变任何内容。使用强制转换或不使用强制转换,返回的对象都将保持不变(或使用简单的转换到组件
)。