簡體   English   中英

無法通過反思實例化課程

[英]Can't instantiate a class through reflection

當我使用java反射創建對象時,它將拋出“ java.lang.ClassNotFoundException”,這是我的代碼:

public class Demo {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("Demo");
        Demo d = (Demo) clazz.newInstance();
    }
}

我錯了。

您必須使用類的完全限定名稱,即包括包,例如:

public class Demo {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("com.mycompany.mypackage.Demo");
        Demo d = (Demo) clazz.newInstance();
    }
}

將完整的程序包名稱傳遞給forName方法。

或者,對於基於java.lang.invoke的解決方案,加分:)

    MethodType mt; MethodHandle mh;
    MethodHandles.Lookup lookup = MethodHandles.lookup();

    mt = MethodType.methodType(void.class);

    try {
        Class klass = Class.forName("com.mycompany.mypackage.Demo");
        mh = lookup.findConstructor(klass, mt);

        Object obj = (Object)mh.invoke();
    } catch (Throwable ex) {
        // ERR
        System.out.println(ex);
    }

暫無
暫無

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

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