这里的话是导入cc4的maven依赖

image-20230521192554529

CC4

这里cc4和前面的不同是在调用transform方法的不同

image-20230521194855536

然后就是接着找谁能调用这个compare方法了

根据发现这条链子的作者写的文章来看

入口点是PriorityQueue这个类

image-20230521195351157

然后就到heapify()

image-20230521195429690

然后接着是siftDown函数

image-20230521195509503

然后接着是siftDownUsingComparator函数

image-20230521195535898

这里的话就和上面的方法对应上了

这里的话都是在PriorityQueue这个类里边进行调用那么因为comparator参数可控,所以就可以直接调用TransformingComparator.compare()方法了,然后就可以调用这个方法里边的transform方法了

最终目的都是为了调用到ChainedTransformer.transform方法

这里的话就会有疑问,就是为什么这里的链子在cc3里不能用,PriorityQueue是jdk里的类,那么出问题的肯定不是他,而是TransformingComparator这个类的问题

image-20230521202532028

image-20230521202543387

就是因为cc3里的这个类没有继承serialize所以就不能进行序列化操作,所以问题就出现在这里了

这里因为啥设的这些参数我这里就不写了 视频这里有讲

接下来就懒得跟了,就是修改调用transform方法的变式罢了

img

就是跟着这张图片来找就行了

cc链子可以用很多种方法来互相组合来进行调用,就是可以用执行代码和调用transform的方法来进行排列组合掉用

理论上应该只有1和3受jdk版本影响

这是b站评论大佬写的总结

b站视频