Guava的Invokable是对java.lang.reflect.Method和java.lang.reflect.Constructor的流式包装。它简化了常见的反射代码的使用。一些使用例子:
方法是否是public的?
JDK:
Modifier.isPublic(method.getModifiers())
Invokable:
invokable.isPublic()
方法是否是package private?
JDK:
!(Modifier.isPrivate(method.getModifiers()) || Modifier.isPublic(method.getModifiers()))
Invokable:
invokable.isPackagePrivate()
方法是否能够被子类重写?
JDK:
!(Modifier.isFinal(method.getModifiers())|| Modifiers.isPrivate(method.getModifiers())|| Modifiers.isStatic(method.getModifiers())|| Modifiers.isFinal(method.getDeclaringClass().getModifiers()))
Invokable:
invokable.isOverridable()
方法的第一个参数是否被定义了注解@Nullable?
JDK:
for (Annotation annotation : method.getParameterAnnotations[0]) { if (annotation instanceof Nullable) { return true; }}return false;
Invokable:
invokable.getParameters().get(0).isAnnotationPresent(Nullable.class)
构造函数和工厂方法如何共享同样的代码?
你是否很想重复自己,因为你的反射代码需要以相同的方式工作在构造函数和工厂方法中?
Invokable提供了一个抽象的概念。下面的代码适合任何一种方法或构造函数:
invokable.isPublic();invokable.getParameters();invokable.invoke(object, args);
List的List.get(int)返回类型是什么?
Invokable提供了与众不同的类型解决方案:
Invokable<List<String>, ?> invokable = new TypeToken<List<String>>() {}.method(getMethod);invokable.getReturnType(); // String.class
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦