终于!!!绕了一大圈终于过来力!!!
CC2它其实是没有走TrAXFilter的这里
image.png
的实例化,而是尝试用InvokerTransformer去调用了
我们使用invokerTransformer方法调用代码如下

1
InvokerTransformer invokerTransformer = new InvokerTransformer<>("newTransformer",new Class[]{},new Object[]{});

后面的就还和CC4一样
但当我运行的时候说没有这个类,所以我考虑是template没有传进去
最后看了别人的说要在add那里加上templates,而且第一个必须是templates
我进行了一个调试
当我们还是用add1和2的时候我们跟进去看看
走到heapify
image.png
compare方法
image.png
找到原因了,因为它需要在这里调用它的method,而我们传的是数字,所以这里变成了这样
image.png
而当我们将1和2改成template后我们追到这里看看吧
compare方法
image.png

image.png
我们会发现这里加载到了TemplatesImpl,而之所以第一个必须要是templates的原因是如果第一次就加载不到,那么它就会抛出异常。
那为什么我们刚才在调CC4的时候这里是1和2就可以呢,我们接着去对比调试
compare方法
image.png
看吧,它这里调用的是ChainedTransformer方法而不是我们CC2中调用的InvokerTransformer方法,所以不用担心类加载不到,加add的原因仅仅是为了绕过这里的if
image.png
而我们CC2中这样设置一方面是为了绕过if,另一方面则是为了加载类。