package jef.common;
/**
* 没有堆栈的异常,用于不影响性能的中断处理流程
*
*/
public class SimpleException extends RuntimeException {
private static final long serialVersionUID = 1L;
private Object[] args = null;
/**
* 阻止填充异常堆栈。减少日志处理信息
*/
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
public SimpleException(String message){
super(message);
}
public SimpleException(Throwable e){
super(e);
}
public SimpleException(String message,Object... args){
super(format(message,args));
this.args=args;
}
/**
* 格式化文本
* @param message
* @param args
* @return
*/
private static String format(String message, Object[] args) {
if(args.length==0)return message;
int start=0;
int index=message.indexOf("{}",start);
int order=0;
StringBuilder sb=new StringBuilder(message.length()+8);
while(index>-1) {
sb.append(message,start,index);//前部分
Object arg;
if(order<args.length) {
arg=args[order];
}else {
arg=args[args.length-1];
}
sb.append(String.valueOf(arg));
order++;
start=index+2;
index=message.indexOf("{}",start);
}
sb.append(message,start,message.length());
return sb.toString();
}
}