Dynamically loading a class in Java

后端 未结 3 2025
时光取名叫无心
时光取名叫无心 2020-12-06 04:37

I looked up the syntax and searched the api but am still confused about the process. I also searched Stackoverflow. What is the proper way to load a class and create an obj

相关标签:
3条回答
  • 2020-12-06 05:02

    ClassLoader.loadClass will load a class. You get a classloader by myClass.getClassLoader() and you should fall back to ClassLoader.getSystemClassLoader() if that is null.

    Once you've got a class instance, you can get its constructors via getDeclaredConstructor(...). So if you have a public class MyClass with a constructor like public MyClass(String) { ... } then

    Class<MyClass> clazz = MyClass.class;
    Constructor<MyClass> ctor = clazz.getDeclaredConstructor(String.class);
    MyClass instance = ctor.newInstance("foo");
    

    The above ignores a bunch of possible exceptions.

    0 讨论(0)
  • 2020-12-06 05:07

    Here is what I got working. This is not a finihsed product, but is just test to see if I could get it to work. Thank you to everyone that answered the questoin :-).

    public class SimLoader {  
      public static void main(String[] args)  
      {  
        try  
        {  
        Object simulator = Class.forName("SimX").newInstance();  
        ((SimInterface)simulator).run();  
        }  
        catch(ClassNotFoundException e) {}  
        catch(InstantiationException e) {}  
        catch(IllegalAccessException e) {}  
        }  
      }  
    interface SimInterface {  
     void run();  
    }  
    class SimX implements SimInterface  
    {  
      public void run() {  
        System.out.println("Success");  
      }  
    }  
    
    0 讨论(0)
  • 2020-12-06 05:19

    Assuming the class has no-arg constructor, the simplest way would be -

    Object newObject = Class.forName(strFullyQualifiedClassName).newInstance();
    

    Reference - java.lang.Class

    0 讨论(0)
提交回复
热议问题