JAVA开发中unsupportedoperationexception的处理

本文探讨了在JAVA开发中遇到UnsupportedOperationException的原因,主要与接口实现和子类继承相关。当调用的方法在相关类中未实现时,会抛出此异常。通过提供正确代码示例,解释了如何避免这种异常,确保接口的实现被正确调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在JAVA开发中 ,遇到unsupportedoperationexception,该异常主要是类的方法不支持引起的。

如果 我们的调用方法,涉及到接口的实现和子类的继承。就需要看下,中间的这些相关类的方法是否都实现了。

 

public interface EmplPushOperator {


 /**
     * 单条人员数据推送
     *
     * @param emplId
     * @return 返回结果
     */
    public String pushEmplSingleData(String emplId);

}


/**
 * 人员数据推送
 *
 * @author justincai
 */
public class HREmplPush implements EmplPushOperator {

@Override
    public String pushEmplSingleData(String emplId) {
        return emplPushOperator.pushEmplSingleData(emplId);
    }

}
public abstract class WEAVEROAPush implements DeptPushOperator, EmplPushOperator {

 @Override
    public String pushEmplSingleData(String emplId) {

      /**

*/
        
        return "";

    }



}

具体调用:

 Class implClass = Class.forName(className);
            Object implObject = implClass.newInstance();

            //把推送渠道具体实现类转换为人员数据推送接口
            EmplPushOperator implEmplPush = (EmplPushOperator) implObject;
            //设置同步记录对象
            implEmplPush.setHrSyncHisService(hrSyncHisService);
            //设置渠道名
            implEmplPush.setChannelName(pushChannel.getChannelName());
            //设置渠道ID
            implEmplPush.setChannelID(pushChannel.getId());

            //构建人员数据推送主类
            HREmplPush hrEmplPush = new HREmplPush(implEmplPush);
            //设置同步记录对象
            hrEmplPush.setHrSyncHisService(hrSyncHisService);
            //设置黑名单操作接口
            hrEmplPush.setBlackListOperatorAPI(blackListOperatorAPI);

            return hrEmplPush.pushEmplSingleData(emplId);

通过反射实现子类调用,如果 HREmplPush的对应方法没有实现,而是默认抛出

  @Override
    public String pushDeptSingleData(String orgId) {
      throw new UnsupportedOperationException("Not supported yet.");
    }

 

就会抛出上述异常,由于没有执行到反射的子类。

正确写法是,直接返回接口的实现,这样才会到反射子类调用类,如下:

 @Override
    public String pushDeptSingleData(String orgId) {
       return deptPushOperator.pushDeptSingleData(orgId);
    }

对照正确代码,不知道大家理解了么?

 

欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值