我有此代码:
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中的方法。
答案 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();
现在一切都可以编译了。