java default value_Java Method.getDefaultValue方法代码示例

import java.lang.reflect.Method; //导入方法依赖的package包/类

@SuppressWarnings("unchecked")

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

if(method.getDeclaringClass()==JAnnotationWriter.class) {

try {

return method.invoke(this,args);

} catch (InvocationTargetException e) {

throw e.getTargetException();

}

}

String name = method.getName();

Object arg=null;

if(args!=null && args.length>0)

arg = args[0];

// check how it's defined on the annotation

Method m = annotation.getDeclaredMethod(name);

Class> rt = m.getReturnType();

// array value

if(rt.isArray()) {

return addArrayValue(proxy,name,rt.getComponentType(),method.getReturnType(),arg);

}

// sub annotation

if(Annotation.class.isAssignableFrom(rt)) {

Class extends Annotation> r = (Class extends Annotation>)rt;

return new TypedAnnotationWriter(

r,method.getReturnType(),use.annotationParam(name,r)).createProxy();

}

// scalar value

if(arg instanceof JType) {

JType targ = (JType) arg;

checkType(Class.class,rt);

if(m.getDefaultValue()!=null) {

// check the default

if(targ.equals(targ.owner().ref((Class)m.getDefaultValue())))

return proxy; // defaulted

}

use.param(name,targ);

return proxy;

}

// other Java built-in types

checkType(arg.getClass(),rt);

if(m.getDefaultValue()!=null && m.getDefaultValue().equals(arg))

// defaulted. no need to write out.

return proxy;

if(arg instanceof String) {

use.param(name,(String)arg);

return proxy;

}

if(arg instanceof Boolean) {

use.param(name,(Boolean)arg);

return proxy;

}

if(arg instanceof Integer) {

use.param(name,(Integer)arg);

return proxy;

}

if(arg instanceof Class) {

use.param(name,(Class)arg);

return proxy;

}

if(arg instanceof Enum) {

use.param(name,(Enum)arg);

return proxy;

}

throw new IllegalArgumentException("Unable to handle this method call "+method.toString());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值