如何替换弃用的类方法?

时间:2018-04-18 12:24:38

标签: java spring spring-mvc interface deprecated

我找到了一段我希望在我的应用程序中实现的代码。代码工作正常,但有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类是WebMvcConfigurerAdapter及其方法addArgumentResolvers。根据文件:

  从5.0开始,WebMvcConfigurer具有默认方法(由Java 8基线实现),并且可以直接实现而无需此适配器

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

1 个答案:

答案 0 :(得分:3)

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

根据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