2015-10-15 37 views
1

我必须从用户那里获取类名并动态加载它。Java:基于用户输入的加载类

public class sample{ 
    public static void main(String[] args) { 
    if(args.length < 1) 
    { 
     print_usage(); 
    } 
    else{ 
     Class inputClass = null; 
     try { 
      inputClass = Class.forName(args[0]); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 

我有一个名为样品2,样品3类:

public class Sample2 { 
    private String name; 
} 

public class Sample3 { 
    private int value; 
} 

我想根据用户输入加载类,无论是样品2 /样品3类。

我有在同一目录中的文件,但我得到java.lang.ClassNotFoundException错误。我如何解决这个错误?

+0

你的课程是在包?你已经将目录添加到类路径了吗? – Jens

回答

2

请更清楚你的问题,我假设你在没有包的情况下输入类名。
如果它们在包中,那么必须使用Class.forName。

Class inputClass = null; 
try { 
    inputClass = Class.forName("my.package.MyClass"); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 
+1

谢谢!这是问题所在。我没有给出包名。 – user2761431

+0

是否可以调用'inputClass'中定义的getter/setter/normal方法?我只能使用'getDeclaredMethods()'获得定义的方法,但我无法定义'inputClass'的实例并调用传递参数的方法。 – user2761431

+0

你可以尝试使用'newInstance()'。但这真的很邪恶。 – Midnightas