繁体   English   中英

为什么投射对象是多余的

[英]Why casting the object is redundant

我有两个可扩展列表的构造函数,如下所示,我也有一个接口如下所示。 现在我想为两个不同的活动使用相同的expandlist适配器,这就是我创建两个构造函数的原因。 但问题是当初始化构造函数时,正如你在第一个构造函数中看到的那样,当我将接口对象初始化为构造函数中的第二个参数时,我会收到“Redundant casting”,而在第二个构造函数中,必须初始化接口对象应该实现该接口的活动的第二个参数

请解释为什么第一个构造函数中的铸件是第二个,而第二个中的铸件是第二个?

更新

both activities extends AppCompatActivity

*代码

public MyExpandableList(Context ctx, ActMain actMain, ArrayList<Group> groupList) {
    this.mCtx = ctx;
    this.mGroupList = groupList;
    this.mBTUtils = new BTUtils(ctx);
    this.mDevDetailsObserver =  (IDeviceDetailsPasser) actMain;//redundant casting, which is not necessary
}

public MyExpandableList(Context ctx, ActConnect actConnect, ArrayList<Group> groupList) {
    this.mCtx = ctx;
    this.mGroupList = groupList;
    this.mBTUtils = new BTUtils(ctx);
    this.mDevDetailsObserver = (IDeviceDetailsPasser) actConnect;//manadory casting

}

//interface
public interface IDeviceDetailsPasser {
public void onDevicedetailsChosen(Header header, Details details, int groupPos);

}

似乎ActMain已经实现了IDeviceDetailsPasser ,这就是为什么冗余的转换。

我认为在这种情况下,您的actMain实现了IDeviceDetailsPasser ,因此转换是多余的,而您的actConnect不实现IDeviceDetailsPasser ,因此强制转换。

编辑 :要处理ClassCastException,请使用try/catch

    try {
        mDevDetailsObserver = (IDeviceDetailsPasser) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement IDeviceDetailsPasser");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM