簡體   English   中英

使用特定的 ClassLoader 獲取 CtClass

[英]get CtClass using specific ClassLoader

我有一個這樣的類結構:

package com.mydomain.myproject;
public class Outer{
    public class Inner{
        //some code
    }
}

現在,我可以使用以下方法獲取內部類的CtClass

ClassPool pool=ClassPool.getDefault();
CtClass innerCt=pool.getCtClass("com.mydomain.myproject.Outer$Inner");

如果這些類是由特殊的ClassLoader加載的,則會出現問題。

ClassPool#getCtClass失敗,因為它使用的ClassLoader不知道該類。

我收到以下異常:

javassist.NotFoundException: io.github.jdiscordbots.nightdream.commands.Eval$Sandbox
    at javassist.ClassPool.get(ClassPool.java:430)
    at javassist.ClassPool.getCtClass(ClassPool.java:495)
    at <my classes>

如何為ClassPool#getCtClass指定ClassLoader 我可以以某種方式設置ClassPool的類加載器嗎? 我注意到有一個getClassLoader()方法,但似乎沒有一個 setter。

ClassPool支持插入、追加和刪除ClassPath ClassPath 可以以 String 或 ClassPath 實現的形式插入和添加。 僅以 ClassPath 的形式支持刪除。

ClassPath 有 4 個提供的實現:

  1. ByteArrayClassPath:提供字節碼和類名
  2. ClassClassPath:提供 Java 類
  3. LoaderClassPath:提供一個類加載器
  4. URLClassPath:提供一個 URL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM