面试题答案
一键面试影响及应对策略
- 方法签名改变
- 影响:依赖该接口的模块中,实现该接口的类会出现编译错误,因为方法签名不匹配。运行时如果调用到这些方法,会导致方法调用异常。
- 应对策略:
- 在接口所在模块中,对旧方法进行兼容处理,比如添加一个新方法,内部调用旧方法实现,并在新方法上使用
@Deprecated
注解标记旧方法。同时在新方法中进行参数转换等操作,以适配新的方法签名。例如:
- 在接口所在模块中,对旧方法进行兼容处理,比如添加一个新方法,内部调用旧方法实现,并在新方法上使用
public interface MyInterface {
@Deprecated
void oldMethod(String oldParam);
void newMethod(int newParam);
default void newMethod(int newParam) {
// 进行参数转换
String oldParam = String.valueOf(newParam);
oldMethod(oldParam);
}
}
- 在依赖模块中,修改实现类,使其方法签名与新接口匹配,并更新实现逻辑。这可能需要根据新的业务需求对实现代码进行较大改动。
2. 新增方法
- 影响:依赖该接口的模块中,实现类如果没有实现新增方法,会导致编译错误。即使编译通过,在运行时调用新增方法也会出现未实现异常。
- 应对策略:
- 在接口所在模块,可以提供默认实现(如果适用),使用default
关键字为新增方法提供一个通用的默认实现,这样依赖该接口的现有实现类不会因为新增方法而编译出错。例如:
public interface MyInterface {
void existingMethod();
default void newMethod() {
// 默认实现逻辑
System.out.println("This is the default implementation of newMethod.");
}
}
- 在依赖模块中,根据业务需求,在实现类中重写新增方法,以提供特定的实现逻辑。
3. 删除方法
- 影响:依赖该接口的模块中,若实现类或调用方使用了被删除的方法,会导致编译错误或运行时方法找不到异常。
- 应对策略:
- 在接口所在模块,避免直接删除方法,而是使用@Deprecated
注解标记要删除的方法,并在文档中明确说明该方法即将被删除,提醒依赖方尽快迁移。同时在一定的过渡时期内,保留该方法的实现。例如:
public interface MyInterface {
@Deprecated
void oldMethodToBeDeleted();
void newMethod();
}
- 在依赖模块中,检查并移除对被删除方法的所有调用,更新业务逻辑以使用新的接口方法或其他替代方案。