我有以下界面:
public interface IRadioButtonGroup<T> {
List<IRadioButton<T>> getButtons();
}
现在我创建一个方法
protected Object getDefaultRadioButtonValue(IRadioButtonGroup<?> field) {
List<IRadioButton<?>> buttons = field.getButtons();
现在,java在抱怨:
Type mismatch: cannot convert from List<IRadioButton<capture#1-of ?>> to List<IRadioButton<?>>
有什么建议么?
方法的无限制通配符参数类型意味着它将接受IRadioButtonGroup
未知类型的。编译器不知道会出现什么类型,但是在编译时,编译器确实会为每个通配符生成并分配一个占位符,因为尽管它不知道会出现哪种类型,但可以肯定必须有一个将替换的类型?
。capture#1-of ?
您会在错误消息中看到该占位符。
基本上,您尝试将a分配List<IRadioButton<Cap#1-of-?>>
给List<IRadioButton<?>>
,这是无效的,其方式类似于List<List<String>>
无法分配给的方式List<List<?>>
。
解决这些问题的一种众所周知的方法是使用捕获助手。基本上,您将创建一个通用方法,并将调用委派给该方法。该通用方法将推断出type参数,然后您便可以进行类型安全的操作。有关更多详细信息,请参见Brian Brian的这篇文章。
因此,要解决此问题,请提供以下代码中的另一种方法:
protected Object getDefaultRadioButtonValue(IRadioButtonGroup<?> field) {
return getDefaultRadioButtonValueHelper(field);
}
private <T> Object getDefaultRadioButtonValueHelper(IRadioButtonGroup<T> field) {
List<IRadioButton<T>> buttons = field.getButtons();
// Write the logic of original method here
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句