java如何中断父类方法_如何从java中的超类方法停止/退出子类方法执行

鉴于以下片段:

超级实施:

@Override

public void onDone(String taskName, JSONObject receivedData, @Nullable HashMap sentData) {

//checks the status for all done process decides to call the presenter failed or success

try {

boolean success = receivedData.getString("status").equals("success");

if(!success){

this.presenter.error(receivedData.getString("reason"));

}

}catch (JSONException ex){

ex.printStackTrace();

this.presenter.error("An error occurred");

}

}

子类实施::

@Override

public void onDone(@NonNull String taskName, @NonNull JSONObject receivedData,

@Nullable HashMap sentData) {

super.onDone(taskName, receivedData, sentData);

//the expected data has been received we should act upon it

//this DAO should know all the type of taskName it can handle and if it finds any that doesn't

//matches any of its command let it exit

Log.e(TAG, "Response : "+receivedData);

Toast.makeText(this.presenter.getContext(), "Done with task", Toast.LENGTH_LONG).show();

if(sentData!=null){

sentData.clear();

sentData = null;

}

}

我想要的是,只要super.onDone方法检测到错误,该进程应该在那里结束,不应该打扰运行子类方法的主体,这在JAVA中可能吗?

解决方法:

你可以

>让方法抛出异常(可能需要更大的重构才能处理异常)

>让方法返回false(将返回类型从void更改为boolean)并在继续之前检查子类中的状态.您还可以返回更详细的状态代码.

>让超类将其处理状态设置为子类可以检查的实例变量(this.wentWell = true).这样做的缺点是它引入了可变状态并且不是线程安全的.

>(这种设计越来越糟糕):让超类更新它收到的HashMap,并提供一些额外的信息供子类获取(sentData.put(“goWell”,“true”)).这类似于servlet过滤器通过设置“请求属性”传递数据的方式.取决于该地图是可更新的(不是这种情况),可能会通过数据注入打开远程攻击(您将内部处理逻辑标志放入可能直接来自谁知道位置的数据结构中).

标签:java,android,design-patterns

来源: https://codeday.me/bug/20190527/1165992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值