接口方法在其他类中不可见

时间:2018-11-21 10:19:11

标签: java generics

我有此代码:

public interface Interface1{
  void interfaceMethod1();
}

public class Class1<T extends Class0&Interface1>{
 private T field;

 public T getField(){
     return field;
 }
}

当我调用class1.getField().interfaceMethod1()时(其中class1是Class1实例),我看到错误“无法解析方法”。

我想用通用字段定义类,其中将包含Class0和Interface1中的方法。

1 个答案:

答案 0 :(得分:4)

假设我们有下一个定义:

public interface Interface1 {
    void interfaceMethod1();
}

public class Class0 {

}
public class Class2 extends Class0 implements Interface1 {
    @Override
    public void interfaceMethod1() {

    }
}

public class Class1<T extends Class0 & Interface1> {
    private T field;

    public T getField() {
        return field;
    }
}

有空

    Class1 class1 = new Class1();
    class1.getField().interfaceMethod1();

这称为类型擦除。这意味着所有通用参数都假设为Object,因此class1.getField()返回Object,而缺少interfaceMethod1方法。

要解决此问题,请执行以下操作:

    Class1<Class2> class1 = new Class1<>();
    class1.getField().interfaceMethod1();

现在一切都可以编译了。