如何替换已弃用的 class 方法?

How to replace deprecated class method?

我找到了一段我想在我的应用程序中实现的代码。该代码工作正常,但有 Deprecated 方法。我说的代码是:

public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(0, 20));
    argumentResolvers.add(resolver);
    super.addArgumentResolvers(argumentResolvers);
}

}

具体来说 Deprecated class 是 WebMvcConfigurerAdapter 并且它是方法 addArgumentResolvers。根据文档:

as of 5.0 WebMvcConfigurer has default methods (made possible by a Java 8 baseline) and can be implemented directly without the need for this adapter

所以我用 interface - WebMvcConfigurer 替换了弃用的 class。问题是界面不允许我使用 addArgumentResolvers 方法。现在我该怎么做?我应该创建 interface 的实例吗?使用已弃用的方法有什么缺点吗?

使用已弃用方法的缺点是,当您迁移到更新版本的库时,该方法可能会完全消失,您将不得不重写代码。另一件事是,库开发人员通常有理由弃用方法 - 它们要么无效,要么导致糟糕的设计,或者(最常见的)有类似物。

根据 Docs 的 WebMvcConfigurer 具有默认方法 addArgumentResolvers(java.util.List<HandlerMethodArgumentResolver> resolvers)。如果不能使用,请检查你的项目是否支持Java 8.

工作原理示例:

DefaultMethods.java

public interface DefaultMethods {   default void example(){
    System.out.println("default method call");   } }

DefalutMethodsTest.java

public class DefalutMethodsTest implements DefaultMethods{
  public static void main(String[] args) {
    new DefalutMethodsTest().example();
  }
  @Override
  public void example() {
    System.out.println("implementer call");
    DefaultMethods.super.example(); 
  }
}

输出:

implementer call
default method call