Java类加载器基础
我需要一个个人命令行工具,该工具应将具体子类的名称作为CL参数,并在运行时实例化正确的Java类:Java类加载器基础,java,abstract-class,classloader,Java,Abstract Class,Classloader,我需要一个个人命令行工具,该工具应将具体子类的名称作为CL参数,并在运行时实例化正确的Java类: public class MyCommandLineTool { public static void main(String[] args) { // Read the name of the desired class to load String strClassName = getClassNameFromArgs(args);
public class MyCommandLineTool
{
public static void main(String[] args)
{
// Read the name of the desired class to load
String strClassName = getClassNameFromArgs(args);
// Now create an instance of that class (if it exists/is valid/etc.)
Shape oShape = someMagicalClassLoaderCall(strClassName);
// Now call the subclass's overridden draw() method
oShape.draw();
}
}
public abstract class Shape
{
// Some stuff
public abstract void draw();
}
public class Circle extends Shape
{
@Override
public void draw()
{
// etc...
}
}
因此,可以从命令行按如下方式运行程序:
java MyCommandLineTool -shape Circle
或者类似的东西(现在不担心命令行调用的语法)
我已经阅读了几篇关于类加载器的入门教程,但是当需要编写自己的类加载器时,我对理解感到窒息。所有教程似乎都专注于如何编写类加载器,但没有解释何时适合这样做。而且,因为这样做似乎相当复杂,如果不需要的话,我宁愿不用自己写
在我看来,如果我有一个已编译的Circle.class
文件,任何JVM在运行时读取该类文件并基于我传递的包含该类名称的字符串构造Circle
的实例都应该没有问题
有谁能澄清我是否需要为这个特定的示例编写自己的加载程序,为什么,如果没有,我需要实现什么来代替someMagicalClassLoaderCall(String)
谢谢 运行程序时,必须确保实际类位于类路径上
Class clazz = Class.forName("fully.qualyfied.ClassName");
Shape instance = (Shape)clazz.newInstance();
instance.draw()
您不需要为此编写自己的类加载器,只需正确指定类路径即可。像这样的方法应该会奏效:
String className = 'Circle';
Class myClass = Class.forName(className);
Object ofMyClass = myClass.newInstance();
它应该简单到:
Class c = Class.forName(strClassName);
Object o = c.newInstance();