不能在java中将String类型转换为Object?

时间:2014-07-02 11:31:20

标签: java

我可以将Object类型转换为String吗?

例如:方法getResponse()返回ObjectRequest

 String s1=(String)req.getResponse();

4 个答案:

答案 0 :(得分:1)

java不能将一个对象神奇地转换为任何其他对象,除非它们具有父子关系。

演员阵容不会以这种方式运作。

所有String都是Object。但并非所有Object都是String


编辑注释你的意思是在java 中无法进行向下投射):

没有。我不是那个意思。在像

这样的情况下可以进行向下铸造
Object obj = getThat();
String s = (String) obj; 

可能,如果你看到的话。如果getThat()方法返回String,则上述代码执行正常。否则为Exception。 同样的规则也适用于getResponse()方法。

答案 1 :(得分:0)

只有在Request也是String的子类(在你的情况下可能不是这样)时,这才有效。你可以做的是:

String s1=req.getResponse().toString();

答案 2 :(得分:0)

如果getResponse()返回String对象但是在Object类型的引用中,则可以接受String,因为respose已经是字符串。

另一方面,如果返回的对象实际上不是String的对象,它将为您提供classcastexeption。

要处理这种情况,建议在投射之前检查对象的类型

喜欢

Object returnedObject = req.getResponse();
if(returnedObject instanceof String)
{
// we can cast it now as string
String str = (String) returnedObject;
// use str as string safely now
}

答案 3 :(得分:0)

不,你不能。这是对Java中的强制转换的一个breef解释:

  

总之,仅在类之间进行转换时类型转换   通知编译器应该将某个对象视为a   某种类型。但是,该对象是否确实属于该类型   取决于运行时类型信息。此外,仅限铸造型   从超类对象到子类对象是有意义的。那就是   B是A的子类,x被声明为A类型:(A x;),其中   表示x具有静态类型A,则B y =(B)x;是必需的,以   输入x从A对象到B对象。在中输入类型   从子类到超类的反向是隐式的:x = y;   //假设y有静态类型B.这是因为B对象总是如此   一个对象。为什么允许(B y =(B)x;)?因为A对象可能   是一个B对象。

     

此外,只允许在超类和超类之间进行类型转换   子类。如果C也扩展/实现A,则从B转换为C或   C到B都会产生编译器错误。一般来说B和C.   每个都包含在另一个中找不到的信息和程序,所以一个   不能简单地成为"另一个。

取自http://www.cs.hofstra.edu/~cscccl/csc17/casting.java