我正在JSF应用程序中实现一个登录过滤器。我有一个名为config的私有字段。Eclipse显示警告"字段AuthenticationFilter.config的值未使用",尽管init和destroy方法中引用了该字段。是我做错了什么,还是Eclipse有点困惑?
下面是AuthenticationFilter类:
package com.mymato.coop;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter("/restricted/*")
public class AuthenticationFilter implements Filter {
private FilterConfig config;
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
if (((HttpServletRequest) req).getSession().getAttribute(
LoginBean.AUTH_KEY) == null) {
((HttpServletResponse) resp).sendRedirect("../login.xhtml");
} else {
chain.doFilter(req, resp);
}
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
public void destroy() {
config = null;
}
}
初始化和销毁config
并不是在"使用"它们——编译器告诉你,你有一个变量,当它不在任何地方使用时,你在浪费内存和时间初始化和销毁它。
我认为如果您将其分配为null,将解决您的问题
private FilterConfig config = null;
有时我也有这个问题。我认为这是因为FilterConfig类的实现方式。
虽然既然你把指针分配给了另一个,我不明白为什么会有问题。另一个快速解决方案:放置一些getter/setter,即使你可能不使用它们:D
更新:此外,davidhxxx所说的
使用字段不会给它一个值。
在代码中,您为字段指定了一个值,但从不使用此字段
在您的情况下,如果您的字段有一个值,但该值字段从未在另一条指令中用作输入值,那么它似乎是无用的。字段有一个值,但没有人使用此值
那么,为什么要宣布呢?然而,警告。
在您的代码中,从未使用过config
。为什么要宣布呢
也许,您的类构建正在进行中,您将需要它。
也许,您永远不需要存储config
对象以便以后使用它。因此,您可以删除类中的字段
问问自己。