Java Javassist 中的 instanceOf 模拟
Java instanceOf analogue in Javassist
我正在 android 项目中为 Gradle 开发一个插件。我使用 Transformation Api 来跨编译操作字节码,为此我选择了 Javassist。我的问题与这个图书馆有关。在操作字节码之前,我需要确定哪种类型有这个 class。例如,如果某些 ctClass
有方法 setOnClickListener()
,我想知道它的类型(由 CtClass 表示的 class 的类型)。可能是 ctClass.instanceOf(android.view.View)
或 ctClass.instanceOf(android.view.ViewGroup)
。我找到了方法 .toClass()
但它抛出 InvocationTargetException
我认为它对我做了不必要的工作
CtClass
对象通常使用 ClassPool.get("classname") 获得,表示您选择的 class 的 class 文件通过“class名称”。它基本上表示对象本身,而不是该对象的实例。
因此它不是实例化对象,找出它是哪个“实例”没有意义。
然而,如果您需要有关 class 层次结构的信息,您可以使用 CtClass
公开的许多方法。这里只是几个例子:
getSuperclass()
- 获取代表class 的超class的class对象
getInterfaces()
- 获取表示由 class 实现的接口的 class 对象
我正在 android 项目中为 Gradle 开发一个插件。我使用 Transformation Api 来跨编译操作字节码,为此我选择了 Javassist。我的问题与这个图书馆有关。在操作字节码之前,我需要确定哪种类型有这个 class。例如,如果某些 ctClass
有方法 setOnClickListener()
,我想知道它的类型(由 CtClass 表示的 class 的类型)。可能是 ctClass.instanceOf(android.view.View)
或 ctClass.instanceOf(android.view.ViewGroup)
。我找到了方法 .toClass()
但它抛出 InvocationTargetException
我认为它对我做了不必要的工作
CtClass
对象通常使用 ClassPool.get("classname") 获得,表示您选择的 class 的 class 文件通过“class名称”。它基本上表示对象本身,而不是该对象的实例。
因此它不是实例化对象,找出它是哪个“实例”没有意义。
然而,如果您需要有关 class 层次结构的信息,您可以使用 CtClass
公开的许多方法。这里只是几个例子:
getSuperclass()
- 获取代表class 的超class的class对象
getInterfaces()
- 获取表示由 class 实现的接口的 class 对象