问题描述
我正在为Android项目中的 Gradle 插件。我使用 Transformation Api 在整个编译过程中使用字节码进行操作,因此我选择了 Javassist 。我的问题与此图书馆有关。在操作字节码之前,我需要确定哪种类型具有此类。例如,如果某些ctClass
具有方法setonClickListener()
,我想知道其类型(由CtClass表示的类的类型)。可以是ctClass.instanceOf(android.view.View)
或ctClass.instanceOf(android.view.ViewGroup)
。我找到了方法.toClass()
,但是它抛出了InvocationTargetException
,我认为它对我来说没有必要
解决方法
CtClass
对象通常是使用ClassPool.get(“ classname”)获得的,它代表您选择要通过“ classname”获得的类的类文件。它基本上表示对象本身,而不是该对象的实例。
因此,它不是实例化的对象,并且找出它是哪个“实例”是没有道理的。
但是,如果您需要有关类层次结构的信息,则可以使用CtClass
公开的许多方法。这里仅举几个例子:
-
getSuperclass()
-获取代表类超类的类对象 -
getInterfaces()
-获取表示由类实现的接口的类对象