首页 > IT职业 > IT生活 > guava反射之Invokable使用
Guava的Invokable是对java.lang.reflect.Method和java.lang.reflect.Constructor的流式包装。它简化了常见的反射代码的使用。一些使用例子:
JDK:
Modifier.isPublic(method.getModifiers())
Invokable:
invokable.isPublic()
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()
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, ?> invokable = new TypeToken
>() {}.method(getMethod);invokable.getReturnType(); // String.class
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2311/viewspace-2805652/ ,如需转载,请注明出处,否则将追究法律责任。