在我的Java Servlet中使用私有类有什么问题吗?

时间:2010-09-13 22:32:37

标签: java servlets coding-style scope private

我的Servlet看起来像这样:

public class MyServlet extends Servlet {

  private class Page {

    private Page(HttpServletRequest request, HttpServletResponse response) {
      /* Do stuff */
    }
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) {

    Page page = new Page(request, response);

    /* Do other stuff */
  }

}

我还有一个看起来像这样的缓存:

public class Cache {

  private Hashtable<String, CacheValue>;

  public Cache() {
    Hashtable<String, CacheValue> table = new Hashtable()<String, CacheValue>;
  }

  public void put(String key, String value) {
    table.put(key, new CacheValue(value));
  }

  private class CacheValue {

    private value;

    private CacheValue(String value) {
      this.value = value;
    }
  }
}

我的问题是:以这种方式使用私有嵌套类有什么问题吗?我知道您通常在单独的文件中有一个单独的公共类,但CacheValue只能使用CachePage仅使用MyServlet。以这种方式组织课程对我来说很有意义,但我不是Java的老职业,所以我对利弊感兴趣。

使用嵌套类通常被认为是一种风格问题吗?还是偏好?还是要避免的事情?还是一种降低复杂性的工具?

3 个答案:

答案 0 :(得分:3)

不,保持私密性并没有错。

当代码不易访问时,更少的东西依赖于它,这使您可以更自由地进行修改。

但是,您应该声明您的CacheValuePagestatic,因为它们不会访问封闭实例的任何成员。

答案 1 :(得分:2)

  

我的问题是:以这种方式使用私有内部类有什么问题吗?我知道你通常在一个单独的文件中有一个单独的公共类,但CacheValue只能由Cache使用。

这没什么不对。 Page类是一个私有的嵌套类。根据定义,嵌套类与其封闭类存在于同一文件中。

这很好,通常在servlet的上下文中。如果(例如)私有类或其成员的可见性存在问题,那么编译器会告诉您。

修改

  

使用嵌套类通常被认为是一种风格问题吗?还是偏好?

很难说哪个。我想,适当使用嵌套类是很好的风格,特别是如果你不需要非静态时声明它们static。但是,我不认为规范的Java风格指南会提到它。

  

还是要避免的事情?

没有

  

还是降低复杂性的工具?

是的......有点儿。我倾向于将嵌套类(尤其是私有嵌套类)视为模块化机制。它并没有降低“圈复杂度”意义上的复杂性,但它确实有助于隐藏/关闭实现细节。

答案 2 :(得分:0)

只要这些函数的唯一调用发生在该类中,你就不应该将它们设置为私有。