在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);
}
对照正确代码,不知道大家理解了么?
欢迎指正。