美文网首页技术干货程序员
Java内部类反射上的坑

Java内部类反射上的坑

作者: zoyanhui | 来源:发表于2017-06-22 18:03 被阅读0次

java的内部类,使用反射时, 构造器参数会多出外部类的类型作为第一个参数。
具体l例子描述如下:

内部类定义如下:

public class CrawlerSourceConsumer {
    public class KafkaNewsConsumerClient {
        public KafkaNewsConsumerClient(Integer threadSeq, ) {
            ....
        }
.....
}

通过:

List<Class> paramClazz = new ArrayList();
paramClazz.add(Integer.class);
Class<T> clazz = KafkaNewsConsumerClient.class;
Constructor constructor = clazz.getConstructor((Class[])paramClazz.toArray(new Class[paramClazz.size()]));

是拿不到构造器的,java反射是通过

private native Constructor<T>[] getDeclaredConstructors0(boolean publicOnly);

拿到的构造器列表, 这是一个native方法。
通过调试可以看到getDeclaredConstructors0拿到的构造器数组包含一个构造器,这个构造器的parameterTypes是:

class  com.XXX.CrawlerSourceConsumer
class  java.lang.Integer

从而与传入的 paramClazz 数组比较,就不会匹配:

    private Constructor<T> getConstructor0(Class<?>[] parameterTypes,
                                        int which) throws NoSuchMethodException
    {
        Constructor<T>[] constructors = privateGetDeclaredConstructors((which == Member.PUBLIC));
        for (Constructor<T> constructor : constructors) {
            if (arrayContentsEq(parameterTypes,
                                constructor.getParameterTypes())) {
                return getReflectionFactory().copyConstructor(constructor);
            }
        }
        throw new NoSuchMethodException(getName() + ".<init>" + argumentTypesToString(parameterTypes));
    }

相关文章

  • Java内部类反射上的坑

    java的内部类,使用反射时, 构造器参数会多出外部类的类型作为第一个参数。具体l例子描述如下: 内部类定义如下:...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • Kotlin内联类、内部类、嵌套类

    Kotlin内联类、内部类、嵌套类 在开始介绍Kotlin内联类、内部类、嵌套类之前,先简要回顾一下java中的内...

  • Java 内部类和泛型的理解

    Java 内部类 Java非静态内部类持有对外部类的引用,可以访问外部类的状态使用方法 OuterClass.th...

网友评论

    本文标题:Java内部类反射上的坑

    本文链接:https://www.haomeiwen.com/subject/phwfcxtx.html