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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦