问题:
我正从事Java的工作.我通常如下设置一些对象:
|
|
问题是:someName
在这个例子里等于null,我是否可以可靠地为所有对象假设为空检查未初始化对象,这是否准确?
最佳回答:
正确,在Java里所有引用类型的静态以及实例成员,没有显式地初始化的,都会被设为null.这个规则同样适用于数组成员.
从Java语言规范, 4.12.5部分可知:
|
|
注意,以上规则不包括局部变量:它们必须显式地初始化,否则程序不会被编译.
问题:
我正从事Java的工作.我通常如下设置一些对象:
|
|
问题是:someName
在这个例子里等于null,我是否可以可靠地为所有对象假设为空检查未初始化对象,这是否准确?
最佳回答:
正确,在Java里所有引用类型的静态以及实例成员,没有显式地初始化的,都会被设为null.这个规则同样适用于数组成员.
从Java语言规范, 4.12.5部分可知:
|
|
注意,以上规则不包括局部变量:它们必须显式地初始化,否则程序不会被编译.
主要功能如下:
主要特性
因为规范里的 HttpSession
以及 HttpServletRequest
都是一种接口,所以可以通过实现该接口来处理我们自定义的逻辑。
Spring Session里的自定义实现HttpServletRequest
的逻辑代码:
|
|
HttpServletRequestWrapper
是HttpServletRequest
实现的一种包装器,可通过继承它来实现自己的主要逻辑代码,而不用直接实现HttpServletRequest
接口来写大部分复杂的代码,只需要关注自己想要覆盖逻辑代码即可。
在这里,因为我们想要实现的是Session共享机制,所以这里只加入了处理Session的业务逻辑即可。
Spring Session默认情况下只有两种Session策略。一种是使用Map来实现,一种是使用Redis来实现。
如果我们想要实现自定义的Session持久化机制,我们可以实现该接口,然后添加到Session策略实现方式即可。
包装完自定义的HttpServletRequest
后,就可使用了。方法是通过 Filter 来将Spring包装的HttpServletRequest代替容器原有的即可。代码如下:
|
|
|
|
web.xml 添加以下 Filter
|
|
spring.xml 添加
|
|
使用上跟普通使用 Session 的方式是一样的。
打完收工。
|
|
|
|
因为 String
和 Integer
不是在同一个对象阶层。
|
|
当你尝试强制转换时,仅仅会在同一个对象阶层转换。比如:
|
|
在这种情况,(A)objB
或者 (Object)objB
或者 (Object)objA
可以进行转换。
正如其他人已经提到,将integer
转换成String
可以使用以下方法:
基本类型的整型时使用:String.valueOf(integer)
或者Integer.toString(integer)
来转换成String
。Integer
对象型时使用:Integer.toString()
转换成String
写代码过程中,居然遇到这种错误(在使用Spring 来操作 Redis 经常出现,但百思不得其姐。和同事讨论时才发现,原来Redis在底层永远是保存String的,即使在写代码的时候是写成 set(String, Object)。这时,如果get这个缓存出来,而且想要的是整型时,就会报java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
错误。),出来工作差不多2年了,这种错误的本质原因,直到今天才明白。实在是太惭愧了。很可能是被所有对象可以以字符串的形式表示而导致的,以为所有的对象在使用 (String)obj
时,会使用 obj.toString()
,所以才造成这种认为理所当然的错觉。