public interface ClassWithList {
public void clearList();
public void tryAdd(Class<T> b);
public void update(Class<T> c);
}
扩展时,我指定了特定的类,并且发生错误。
public class Test implements ClassWithList {
@Override
public void clearList() {}
@Override
public void tryAdd(Test b) {
// Error
}
@Override
public void update(Test c) {
// Error
}
}
Java可以这样扩展接口吗?
告诉我我做错了什么。谢谢你!
由于所提供的代码存在与
T接口中未定义类型相关的编译错误ClassWithList,因此我们首先需要解决此问题。有两种方法可以做到这一点:
ClassWithList泛型在这种情况下
tryAdd,方法的参数update将使用相同的类型。同时,在方法中
tryAdd,update参数必须是类型T,而不是类型Class<T>,如果在实现该接口的类中Test,所提到的方法中的参数必须是类型Test:然后,在声明类时,
Test应该在尖括号中指明参数类的类型:这种实现是最自然的;可以将类的实例传递给指定的方法
Test:1.a) 如果上述方法中的参数出于任何原因必须保留类型
Class<T>,则需要更改实现以匹配接口。在此实现中调用方法时,只能传递编译时已知的类型,即
TestA.class:tryAdd通用方法update由于该接口的声明没有指定类型参数,因此它本身不是泛型的,因此泛型方法也会保留在实现中:
也就是说,可以将任何类的对象传输给它们:
是否需要实施此类措施的问题仍然悬而未决。