调用具有自己的返回类型的接口时,Java类型不匹配?

时间:2016-03-20 21:11:46

标签: java generics interface

过去几天我一直在试着解决这个问题,并且搜索我能想到的一切都无济于事。

我有一个类通过接口与另一个进行交互。我遇到了一些类型不匹配错误,代码对我来说似乎很简单。

public class FooBar {
  Foo<? extends Bar> X = new Y();

  public void test(){
    if X.isA(X.B()){
       //do something; type mismatch here
    }

  }
}

接口:

public interface Foo<T extends Bar> {
  public T B();
  public boolean isA(T t);
}

实现:

public class Y implements Foo<T extends Bar> {
  public int B(){
    return 5;
  }

  public boolean isA(int num){
    int A = 10;
    return (A == num) ? true : false;

}

我的问题是方法测试()。我通过接口获取一个数字,然后使用相同的实现类实例测试它,但这给了我一个捕获/类型不匹配错误。

  

CAP#1从禁止捕获?延伸吧

     

CAP#2从禁止捕获?延伸吧

我尝试了很多我在搜索中找到的东西,但没有一个能够奏效。泛型和接口对我来说是新的,我还在学习它们。感谢您提前提供任何帮助!

1 个答案:

答案 0 :(得分:0)

我已经更新了你的课程(为了清楚起见,我添加了缺少的Bar类)。 您现在可以运行FooBar.main()方法并获得您期望的结果:

public class FooBar {
    Foo x = new Y();

    public void test(){
        if(x.isA(x.B())){
            System.out.println("x.isA!");
        }
    }

    public static void main(String... args){
        FooBar fb = new FooBar();
        fb.test();
    }
}

public interface Foo<T extends Bar> {
    T B();
    boolean isA(T t);
}

public class Bar {}

public class ExtendsBar extends Bar {

    @Override
    public String toString(){
        return "Yes I extend Bar";
    }
}

public class Y implements Foo<ExtendsBar> {
    public ExtendsBar B() {
        return new ExtendsBar();
    }

    public boolean isA(ExtendsBar num) {
        return (num instanceof Bar);
    }
}