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

在我的Javaservlet中使用私有类有什么问题吗?,java,servlets,coding-style,scope,private,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, Http

我有一个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;
    }
  }
}
我还有一个缓存,看起来像这样:

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;
    }
  }
}
公共类缓存{
私有哈希表;
公共缓存(){
Hashtable=新的Hashtable();
}
公共void put(字符串键、字符串值){
table.put(key,new CacheValue(value));
}
私有类缓存值{
私人价值;
私有缓存值(字符串值){
这个值=值;
}
}
}
我的问题是:以这种方式使用私有嵌套类有什么问题吗?我知道您通常在一个单独的文件中有一个单独的公共类,但是
CacheValue
只能由
缓存使用。
页面
仅由
MyServlet
使用。以这种方式组织类对我来说是有意义的,但我在Java方面不是老专家,所以我对利弊很感兴趣


使用嵌套类通常被认为是一种风格吗?还是偏好?还是要避免什么?或者一个降低复杂性的工具?

只要这些函数的唯一调用发生在该类中,你就不应该对它们的私有性有任何问题。

只要这些函数的唯一调用发生在该类中,你就不应该对它们的私有性有任何问题。

否,保密没有什么错

当代码不易访问时,依赖它的东西就会减少,这就给了您更多修改的自由


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

不,将事物私有化没有错

当代码不易访问时,依赖它的东西就会减少,这就给了您更多修改的自由

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

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

这没问题。
页面
类是一个私有嵌套类。根据定义,嵌套类与其封闭类位于同一文件中

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

编辑

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

很难说是哪个。我想,适当地使用嵌套类是一种很好的风格,特别是当您在不需要非静态的情况下声明它们时。然而,我不认为规范的Java风格指南提到了这一点

还是要避免什么

没有

还是减少复杂性的工具

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

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

这没问题。
页面
类是一个私有嵌套类。根据定义,嵌套类与其封闭类位于同一文件中

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

编辑

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

很难说是哪个。我想,适当地使用嵌套类是一种很好的风格,特别是当您在不需要非静态的情况下声明它们时。然而,我不认为规范的Java风格指南提到了这一点

还是要避免什么

没有

还是减少复杂性的工具


是的。。。某种程度上。我倾向于将嵌套类(尤其是私有嵌套类)视为一种模块化机制。从“圈复杂度”的角度来看,它并没有降低复杂性,但它确实有助于隐藏/关闭实现细节。

谢谢。不过,它们不应该是静态的。我只展示了代码的一小部分。:)啊,好的。我只是想指出“静态嵌套”类和“内部”类之间的区别,以供考虑。谢谢。我对此表示感谢,并将问题改为“嵌套”而不是“内部”。谢谢。不过,它们不应该是静态的。我只展示了代码的一小部分。:)啊,好的。我只是想指出“静态嵌套”类和“内部”类之间的区别,以供考虑。谢谢。我很感激,并将问题改为“嵌套”而不是“内部”。这一切都非常有效。我知道作用域和上下文是如何工作的,但更感兴趣的是是否通常避免使用嵌套类。我会修正我的问题。这一切都很有效。我知道作用域和上下文是如何工作的,但更感兴趣的是是否通常避免使用嵌套类。我会修正我的问题。我知道你没有展示全部代码,但是如果只有doGet方法使用Page类,你可以将Page类嵌套在doGet方法中——实现更高级别的封装。你不能用CacheValue做这个。哦!我明白了。但事实并非如此。谢谢。我知道您没有显示全部代码,但是如果doGet方法使用Page类就好了