ITPub博客

首页 > IT职业 > IT生活 > guava反射之Invokable使用

guava反射之Invokable使用

IT生活 作者:daifan 时间:2021-09-09 09:39:17 0 删除 编辑

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, ?> invokable = new TypeToken>()        {}.method(getMethod);invokable.getReturnType(); // String.class

原文链接:http://outofmemory.cn/java/guava/reflect/Invokable

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2311/viewspace-2805652/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    96
  • 访问量
    810