我在抽象 java 类中有以下代码:
protected abstract <E extends HasText & IsWidget> E createNewDisplayWidget();
编译得很好。但是,如果我在任何地方调用它,编译器都会提示:
Bound mismatch: The generic method createNewDisplayWidget() of type DemoClass is not applicable for the arguments (). The inferred type HasText is not a valid substitute for the bounded parameter <E extends HasText & IsWidget>
有没有办法要求抽象方法返回应该实现多个接口(interface)的东西?
注意:不,我不能创建一个实现我喜欢的两个的特殊接口(interface)。 GWT 有像 Label 这样的小部件,它们已经实现了上述接口(interface),我想使用上述小部件。
编辑:我从这里(第 22 页)得到了这样做的想法:
最佳答案
我已经根据您的问题进行了尝试,并且能够顺利通过。请检查我创建的类。
测试类
public abstract class TestClass {
protected abstract <E extends HasText & IsWidget > E createNewDisplayWidget();
}
HasText 类
public class HasText {
}
IsWidget
public interface IsWidget {
}
演示课
public class DemoClass extends HasText implements IsWidget{
}
测试类1
public class TestClass1 extends TestClass{
@Override
protected DemoClass createNewDisplayWidget() {
// TODO Auto-generated method stub
DemoClass type = new DemoClass();
return type;
}
public void checkOut(){
if(createNewDisplayWidget() instanceof HasText || createNewDisplayWidget() instanceof IsWidget){
System.out.println("Yes it works");
}
else{
System.out.println("It doesnt");
}
}
public static void main(String[] args){
TestClass1 check = new TestClass1();
check.checkOut();
}
}
当我运行我的主程序时,我总是得到“是的,它有效”。请让我知道我是否遗漏了什么。
关于Java:抽象方法中的多态返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524908/