【问题标题】:Converting New Java code to an older Java syntax将新的 Java 代码转换为旧的 Java 语法
【发布时间】:2019-06-17 15:15:31
【问题描述】:

我正在尝试将用 Java 1.8 编写的类转换为 Java 1.4。这是一个较旧的 Java 应用程序,但我以前从未在 Java 1.4 中编写过代码。

这是 Java 1.8 代码:

public class RequestContext implements Filter {

    private static final ThreadLocal<HttpServletRequest> REQUEST_HOLDER = new ThreadLocal<HttpServletRequest>();

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

        if (servletRequest instanceof HttpServletRequest) {
            REQUEST_HOLDER.set((HttpServletRequest) servletRequest);
        }

        try {
            chain.doFilter(servletRequest, servletResponse);
        }
        finally {
            REQUEST_HOLDER.remove(); // Clean up the ThreadLocal
        }
    }

    /**
     * @return the HttpServletRequest for the current thread.
     */
    public static HttpServletRequest getRequest() {
        return REQUEST_HOLDER.get();
    }

    @Override
    public void destroy() {

    }

}

如何将以上内容转换为 Java 1.4?

【问题讨论】:

  • 我建议下载并查看Java 1.4 SDK documentation 并根据编译器错误逐行查看。
  • Java 1.4 所针对的 Java EE 和 Servlet 规范的版本是什么?
  • 您为什么要这样做?谁告诉你花时间向后移植到 2008 年结束生命的 Java 版本?
  • 你为什么在乎?这是一个在 1.4 上运行的旧应用程序。
  • 我很惊讶没有人明确提到将编译的 -source 级别设置为 1.4 (javac -source 1.4 etc...)。在 1.4 之后实现的任何功能的使用都将被编译器标记。您使用的是哪个 IDE?

标签: java servlets thread-local


【解决方案1】:

您很可能必须定位 Servlet 2.3 specification 或更新版本,因为它引入了 Filter。根据文档:

过滤器是 Java servlet API 2.3 版中的一项新功能。

看起来您必须删除泛型,因为它们是在 Java 1.5 中引入的。 ThreadLocal 在 Java 1.2 中可用,尽管 remove() 方法是在 1.5 中引入的。代码应该如下所示:

public class RequestContext implements Filter {

    private static final ThreadLocal REQUEST_HOLDER = new ThreadLocal();

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        if (servletRequest instanceof HttpServletRequest) {
            REQUEST_HOLDER.set(servletRequest);
        }
        try {
            chain.doFilter(servletRequest, servletResponse);
        } finally {
            REQUEST_HOLDER.set(null);
        }
    }

    /**
     * @return the HttpServletRequest for the current thread.
     */
    public static HttpServletRequest getRequest() {
        return (HttpServletRequest) REQUEST_HOLDER.get();
    }

    @Override
    public void destroy() {

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2019-07-16
    • 2012-10-06
    • 1970-01-01
    • 2016-04-14
    • 2014-05-27
    相关资源
    最近更新 更多