java为什么强制转换对象是多余的
我有两个用于可扩展列表的构造函数,如下所示,我还有一个界面,如下所示。现在我想使用相同的expandlist适配器 两个不同的活动这就是为什么我创建了两个构造函数。但是问题是初始化构造函数的时候,正如你在第一个构造函数中看到的,当我 初始化接口对象到构造函数中的第二个参数,我收到“冗余强制转换”,而在第二个构造函数中,必须初始化 接口对象指向第二个参数,该参数表示应实现该接口的活动
请解释为什么第一个构造器中的施法是rundant,而第二个构造器中的施法是manadory
更新
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);
}
# 1 楼答案
我认为在这种情况下,您的
actMain
实现了IDeviceDetailsPasser
,因此强制转换是多余的,而您的actConnect
没有实现IDeviceDetailsPasser
,因此强制转换是必需的编辑: 要处理ClassCastException,请使用
try/catch
# 2 楼答案
看起来
ActMain
已经实现了IDeviceDetailsPasser
,这就是冗余强制转换的原因