![](/img/trans.png)
[英]casting 'findViewByld(...)' to 'EditText' is redundant
[英]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.