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

3

我找到了一段我想要在我的应用程序中实现的代码。这段代码可以正常工作,但是有一些已弃用的方法。我所指的代码是:

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 的实例吗?使用已弃用的方法会有什么缺点吗?

“使用已弃用的方法有什么缺点吗?” - 你可能需要查一下“已弃用”的含义。如果你根本不升级库,那么就没有“缺点”,但这基本上意味着不能保证在将来的库版本中已弃用的类或方法会存在,可能会在升级时破坏你的代码。 - rmlan
可能是[当为相同类型添加自定义解析器时,默认参数解析器会发生什么?]的重复问题(https://dev59.com/sqbja4cB1Zd3GeqPahGV)。 - Alexius DIAKOGIANNIS
1个回答

3
使用过时的方法的缺点是,当您迁移到库的新版本时,该方法可能完全消失,您将不得不重写代码。另一件事是,通常库开发人员废弃方法有原因 - 要么它们无效,要么导致糟糕的设计,要么(最常见的)有类似方法。
根据文档,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

可以的。我只是无法将该方法应用于“super”类。 - Maciaz
1
没有超级类,因为你实现了一个接口。在这个类中调用它。 - Imaskar
如果您需要为其添加一些功能,请参见我添加的示例。 - Imaskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接