Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-为什么对象被强制转换为类?_Java_Android_Class_Object_Casting - Fatal编程技术网

Java Android-为什么对象被强制转换为类?

Java Android-为什么对象被强制转换为类?,java,android,class,object,casting,Java,Android,Class,Object,Casting,我经常看到这个 一种返回对象的方法,即 public Object getGroup(int groupPosition) { return groups.get(groupPosition); } 然后,当调用此函数时,返回的对象被强制转换到某个类,即 ExpandListGroup group = (ExpandListGroup) getGroup (groupPosition); 似乎是这样的,如果返回一个普通对象,您知道该对象的类(TestClass),并且

我经常看到这个

一种返回对象的方法,即

public Object getGroup(int groupPosition) 
{       
    return groups.get(groupPosition);
}
然后,当调用此函数时,返回的对象被强制转换到某个类,即

ExpandListGroup group = (ExpandListGroup) getGroup (groupPosition);
似乎是这样的,如果返回一个普通对象,您知道该对象的类(TestClass),并且您想要将一个预声明对象(X)设置为该返回对象(Y),那么您需要以..的形式强制转换相应的类

TestClass X = (TestClass) returnsY();
这是正确的吗?将对象强制转换为类是否还有其他更深层次的含义/结果


为能够调用TestClass的方法干杯。但是如果之前没有任何检查(查看对象是否确实是TestClass的实例),您将得到一个ClassCast异常,该异常是为了能够调用TestClass的方法而执行的。但是如果之前没有进行任何检查(查看对象是否确实是TestClass的实例),您将得到一个ClassCast异常

所有引用都需要保存与引用或其子类型相同类型的对象。因为编译器只知道
getGroup
返回
Object
,所以不能让对象被分配给
TestClass
引用(Object可能并没有实现TestClass拥有的所有方法)。要解决这个问题,您需要显式地告诉编译器,通过强制转换,
getGroup
返回的对象也是
TestClass
类。

所有引用都需要包含与引用或其子类型相同类型的对象。因为编译器只知道
getGroup
返回
Object
,所以不能让对象被分配给
TestClass
引用(Object可能并没有实现TestClass拥有的所有方法)。要解决这个问题,您需要显式地告诉编译器,通过强制转换
getGroup
返回的对象也是
TestClass
类。

认为是这样的,谢谢您的澄清!我还以为是那样的,谢谢你把它弄清楚!所以,如果Y不是泛型对象,而是扩展X的类,那么您就不必强制转换了?不确定您的意思。如果
Y扩展了X
,那么您可以使用
X=newy()
,而无需将Y强制转换为X(多亏了多态性)。同样,如果声明
someMethod
返回
Y
,那么您可以简单地
X=someMethod()
。因此,如果Y不是泛型对象,而是扩展X的类,则不必强制转换?不确定您的意思。如果
Y扩展了X
,那么您可以使用
X=newy()
,而无需将Y强制转换为X(多亏了多态性)。如果声明
someMethod
返回
Y
,则可以简单地
X=someMethod()