【问题标题】:Android - Why are objects casted to Classes?Android - 为什么将对象转换为类?
【发布时间】:2012-12-17 11:30:14
【问题描述】:

我经常看到这个,

返回对象的方法,即

public Object getGroup(int groupPosition) 
{       
    return groups.get(groupPosition);
}

那么当这个函数被调用时,返回的对象被强制转换为某个类,即

ExpandListGroup group = (ExpandListGroup) getGroup (groupPosition);

似乎是这样的,如果返回一个普通对象,你知道那个对象的类(TestClass)并且你想为那个返回的对象(Y)设置一个预先声明的对象(X),你需要强制转换对应的类,形式为..

TestClass X = (TestClass) returnsY();

这是正确的吗?将对象转换为类还有其他更深层次的含义/后果吗?

干杯

【问题讨论】:

    标签: java android class object casting


    【解决方案1】:

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

    【讨论】:

    • 所以如果 Y 不是一个泛型对象而是一个扩展 X 的类,你就不必强制转换了吗?
    • 不确定你的意思。如果Y extends X 那么您可以使用X x = new Y() 而无需将Y 转换为X(感谢多态性)。如果我们说someMethod 被声明返回Y,那么你可以简单地X x= someMethod()
    【解决方案2】:

    这样做是为了能够调用 TestClass 的方法。但是如果没有任何先前的检查(以查看该对象确实是 TestClass 的一个实例),您将得到一个 ClassCast 异常

    【讨论】:

    • 以为是这样的,谢谢你的澄清!
    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2020-11-27
    相关资源
    最近更新 更多