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()
。