[英]What is the difference between toGenericString and toString in java.lang.reflect.Field
[英]What is difference between .toString() and (String) cast in Java
我想从会话对象中读取一个返回Object
类型的值。 我知道该对象具有true
/ false
值。 我想将该值转换为boolean
类型。 所以我有以下代码。
session.getAttribute("MyKeyValue"); // It returns Object type
下面抛出异常。
boolean myBoolVal = Boolean.parseBoolean((String) session.getAttribute("MyKeyValue"));
以下工作正常。
boolean myBoolVal = Boolean.parseBoolean(session.getAttribute("MyKeyValue").toString());
实际上,我不明白为什么选项1不起作用?
当session.getAttribute("MyKeyValue")
返回的实例的运行时类型不是String
,将其强制转换为String
会抛出ClassCastException
。
另一方面, session.getAttribute("MyKeyValue").toString()
始终有效(假设session.getAttribute("MyKeyValue")
不为null),因为所有对象都具有toString()
方法的实现。
顺便说一句,因为session.getAttribute("MyKeyValue")
没有返回一个String
,所以很可能它返回一个Boolean
(因为你希望Boolean.parseBoolean()
工作),所以如果是这样的话,而不是转换它到String
然后再到Boolean
,你可以将它转换为Boolean
:
Boolean myBoolVal = (Boolean) session.getAttribute("MyKeyValue");
您可以在会话对象中设置所需的任何对象,并将其与关联关联。 任何对象都意味着任何类的任何对象。 由于任何类都是Object
的可能间接子类,因此在set
和get
键入Object
。
当你通过get
检索一个对象时,它只是输入为Object
但肯定是某个子类。 如果原始类不是String
,则(向下)将其强制转换为String
可能会失败(抛出异常,表示无法实现强制转换/转换)。 似乎是您的选择1的情况。
选项2的工作原理是因为任何Object
实例都有一个方法toString()
,可以调用该方法来获取对象的String
表示(主要用于屏幕上的表示)。 然后parse
该表示(可能是"true"
或"false"
)以获取值为true
或false
的boolean
值。
因此,如果您希望选项1工作,因为您的对象可能是Boolean
实例,您可以使用:
boolean myBoolVal = (Boolean)session.getAttribute("MyKeyValue");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.