【问题标题】:Deprecation warning while implement HttpSession实现 HttpSession 时的弃用警告
【发布时间】:2013-04-01 15:30:20
【问题描述】:

当我尝试实现 HttpSession 时,我应该重写 getSessionContext 方法。但它会引发弃用警告,因为该方法及其返回类型 HttpSessionContext 已弃用。

@deprecated javadoc 标记修复了getSessionContext 定义的警告,但无法修复HttpSessionContext 导入的警告。并且将@SuppressWarnings 放在导入之前会导致编译错误。

如何解决这两个警告?

代码:

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionContext;

public class MyServletSession implements HttpSession {
    // ...

    /**
     * @deprecated
     */
    @Override
    public HttpSessionContext getSessionContext() {
        throw new UnsupportedOperationException();
    }

    // ...
}

警告:

$ javac -Xlint:deprecation -cp /path/to/javax.servlet-api-3.0.1.jar MyServletSession.java
MyServletSession.java:5: warning: [deprecation] HttpSessionContext in javax.servlet.http has been deprecated
import javax.servlet.http.HttpSessionContext;
                                     ^
1 warning

【问题讨论】:

  • 我相信你应该尽量避免使用HttpSessionContext。根据 javadoc:“已弃用。出于安全原因,从 Java(tm) Servlet API 2.1 开始,没有替代品。此接口将在此 API 的未来版本中删除。”
  • 通常弃用是有充分理由的:告诉你,如果你能负担得起,你应该遵循任何新的实现来替换被弃用的方法类。否则,如何使用 @Override 注释标记整个类(当然不推荐)?
  • 你为什么要实现 HttpSession?你在实现一个容器吗?
  • 为什么要实现自己的HttpSession?
  • 我在 PlayFramework 2.1 上使用 jgit 实现 Git 存储库托管,而 jgit 需要 PlayFramework 2.1 没有的 Servlet。因为我认为实现 Servlet 比将 Servlet 导入 PlayFramework 2.1 更容易,所以我应该实现 Servlet 包括 HttpSession。我几乎成功了,但只剩下警告。

标签: java servlets httpsession


【解决方案1】:

如果你真的需要实现你自己的HttpSession,并抑制弃用警告,我相信正确的编译器参数是-Xlint:-deprecation。注意- 之前的deprecation

编辑:这会删除所有弃用警告,因此如果您试图仅禁止该类中的警告,它可能不适合。相反,我发现这对我有用:

// Note, no import of javax.servlet.http.HttpSessionContext
import javax.servlet.http.HttpSession;

@SuppressWarnings("deprecation")
public class MySession implements HttpSession {

    /**
     * This javadoc comment, along with the fully qualified name of HttpSessionContex in the method signature seems to do the trick.
     * @deprecated
     */
    public javax.servlet.http.HttpSessionContext getSessionContext() {
    }

    //... All your other methods
}

【讨论】:

  • 谢谢,但我只想抑制(或修复)警告。
  • 哇,即使没有@SupressWarnings("deprecation"),它也能完美运行。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多