Java:抽象方法中的多态返回类型?

标签 java gwt parametric-polymorphism

我在抽象 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 页)得到了这样做的想法:

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

最佳答案

我已经根据您的问题进行了尝试,并且能够顺利通过。请检查我创建的类。

测试类

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/

相关文章:

internet-explorer - 带有弹出窗口和 iFrame 的 GWT/GXT 应用程序,在带有 Adob​​e reader 的 Internet Explorer 下,PDF 不会隐藏

java - 如何检查java中的编码?

java - 逐行比较文本文件与动态变量

java - 将 Java 转换为 Kotlin : Type mismatch. 需要 : MenuSlidingTabStrip. OnTabSelectedListener?发现 : (Nothing, Nothing) → Boolean

xml - GWT XML 替换类

java - libGDX : Correctly using websocket for GWT

elm - Elm 中 'msg'中的 'HTML msg'实际上是什么?

具有不同返回类型的 C++ 多态函数

java - 需要 Drools 项目创意

haskell - 在 where 子句中键入签名