在这个工厂中,返回实现了特殊接口的
我是做错了什么吗?还是说我必须在此处将
Component
,我遇到了错误“类型不匹配:无法从SpiffyCombo转换为C”在createSomethingSpiffy
中。我是做错了什么吗?还是说我必须在此处将
SpiffyCombo
转换为C
?class Factory {
public static <C extends Component & SpiffyComponent> C createSomethingSpiffy(Object... params) {
C comp = new SpiffyCombo();
// real method will be more complex
return comp;
}
}
class SpiffyTextField extends Component implements SpiffyComponent {
public void wow() { ... }
}
class SpiffyCombo extends JComboBox implements SpiffyComponent {
public void wow() { ... }
}
interface SpiffyComponent {
void wow();
}
SpiffyTextField foo = Factory.<SpiffyTextField>createSomethingSpiffy()
,会发生什么? - Sotirios DelimanolisC comp = new SpiffyCombo()
这一行出现了编译错误,在调用之前就已经出现了问题。此外,实际上,特定的返回类型将由传递给createSomethingSpiffy
的参数确定。 - Brad MacecreateSomethingSpiffy
方法,它接受一个数据库字段名称并返回适当类型的SpiffyComponent
。我正在尝试修改它,以便我至少可以将结果用作Component
而无需转换;获取确切的子类型甚至更好。 - Brad Mace