在我的Javaservlet中使用私有类有什么问题吗?
我有一个Servlet,看起来像这样:在我的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
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类就好了